Python
コーディング規約
演算子
# 論理演算
x or y
x and y
not x
# 比較演算
x < y
x <= y
x > y
x >= y
x == y // 値が等しい
x != y // 値が等しくない
x is y // 同一のオブジェクトである
x is not y // 同一のオブジェクトではない
論理演算
論理値型 bool()
x = True
y = False
# 論理演算
x and y
x or y
not x
x & y // and
x | y // or
x ^ y // xor
数値計算
数値型
1 // int 整数
1.0 // float 実数
complex(1,2) // 複素数
浮動小数点数は、文字列 “nan” と “inf” を、オプションの接頭辞 “+” または “-” と共に、非数 (Not a Number (NaN)) や正、負の無限大として受け付けます。
基本数値演算
print(1+2)
print(3-4)
print(5*6)
print(10/3) # 返値は実数
print(3**2) # べき乗
print(pow(3, 2)) # べき乗
print(10//3) # 割った時の「商」
print(10%3) # 割った時の「余り」
print(divmod(10,3)) # (商, 余り) の tupleが返値
print(abs(-123)) # 絶対値
出力結果
3
-1
30
3.3333333333333335
9
3
1
x = -12.3
数値型の変換
# 実数を整数に変換
# 小数点以下を切り捨て
print(int(9.1))
print(int(-9.1))
print(int(0.8))
9
-9
0
文字列
s1 = "ほげ'あほ'ほげ" # " " で生成するときは内部に ' を入れられる
s2 = 'ほげ"あほ"ほげ' # ' ' で生成するときは内部に " を入れられる
s3 = """改行をいれるときは、
クォート3つで生成する
"""
print(s1)
print(s2)
print(s3)
ほげ'あほ'ほげ
ほげ"あほ"ほげ
改行をいれるときは、
クォート3つで生成する
メソッド
str = "aBcDe"
print(str)
print(str.capitalize()) # 先頭を大文字、残りを小文字にした文字列を返す
print(str.casefold()) # 英語以外のアルファベットも小文字化する
print(str.center(10, "x")) # 元の文字列を中央に配置した、長さ10の文字列を生成する、足りない部分はxで埋める
aBcDe
Abcde
abcde
xxaBcDexxx
# 部分文字列のカウント
str2 = "aaaaaAAAAAaaaaaAAAAA日本語はどうですか日本語"
print(str2.count("日本語"))
print(str2.count("aa",3))
print(str2.count("aa",3, 13))
2
3
2
ファイルを文字列として読み込む
f = open('path_to_file', 'r')
data = f.read()
f.close()
テンプレート文字列の置換
オブジェクトの値を用いてテンプレート文字列の中身を置換する
format メソッド
project = 'my_project'
dataset = 'my_dataset'
table = 'my_table'
# format メソッドを使った方法 1
template = 'SELECT size_bytes FROM `{project}.{dataset}.{table}`'
print(template.format(project=project, dataset=dataset, table=table))
# SELECT size_bytes FROM `my_project.my_dataset.my_table`
# format メソッドを使った方法 2
# テンプレートに置換する名前を指定しない場合は、与えたオブジェクトが順に適用される
template = 'SELECT size_bytes FROM `{}.{}.{}`'
print(template.format(project, dataset, table))
# SELECT size_bytes FROM `my_project.my_dataset.my_table`
f文字列を使った方法
こちらの方が format メソッドより簡単だが、テンプレート文字列をオブジェクトして保存した場合には使えない
# f文字列を使った方法
print(f'SELECT size_bytes FROM `{project}.{dataset}.{table}`')
シーケンスコンテナ
list
tuple
range
これらに共通の演算
s
とt
は同じ型のシーケンスn
、i
、j
、k
は整数x
はs
に課された型と値の条件を満たす任意のオブジェクトです。
x in s # s のある要素が x と等しければ True , そうでなければ False
x not in s # s のある要素が x と等しければ False, そうでなければ True
s + t # s と t の結合
s * n # s 自身を n 回足すのと同じ
s[i] # s の 0 から数えて i 番目の要素
s[i:j] # s の i から j までのスライス
s[i:j:k] # s の i から j まで、 k 毎のスライス
len(s) # s の長さ(要素数)
min(s) # s の最小の要素
max() # s の最大の要素
s.index(x) # s 中で値 x が最初に出現するインデックス
s.index(x, i) # s の i 番目以降の要素で、値 x が最初に出現するインデックス
s.index(x, i, j) # s の i 番目から j 番目の要素の中で x が最初に出現するインデックス
list
同じ型の値を要素として持つシーケンスコンテナ
l1 = [] # 空のリスト
l2 = [1,2,3]
l3 = [x**2 for x in range(0,3)] # リスト内包表記を使ったリストの生成
l4 = [x**2 for x in [0,1,2,3]] #
print(l3)
print(l4)
[0, 1, 4]
[0, 1, 4, 9]
メソッド
sort()
l = [3,4,2,9,7]
l.sort() # lの要素を直接ソートする、ソートしたリストを返さない
print(l)
[2, 3, 4, 7, 9]
l = [3,4,2,9,7]
l.sort(reverse = True) # lの要素を逆順でソートする
print(l)
[9, 7, 4, 3, 2]
元のリストをそのままにして、ソートされたリストが欲しい時は sorted()
を利用する
l1 = [3,4,2,9,7]
l2 = sorted(l1)
print(l)
print(l2)
[3, 4, 2, 9, 7]
[2, 3, 4, 7, 9]
tuple
タプルはイミュータブルの型なので、値は変更できない、基本的に使い捨て
(1,2,3) # 丸括弧で作成するのが基本
1,2,3 # 丸括弧なしでも作成できる
tuple((1,2,3)) # tupleで tuple を初期化
tuple(['a','b','c']) # list で tuple を初期化
名前付き tuple
from collections import namedtuple
# 名前付きタプルのクラスを定義
Point = namedtuple('Point', ['x', 'y'])
# インスタンスを生成
p = Point(x=1, y=2)
print(p)
print(p['x'])
range
整数の範囲を示す
forループやlistを初期化するときに使うことが多い
print(list(range(10))) # 終了10
print(list(range(1, 15))) # 開始1 終了15
print(list(range(1, 15,3))) # 開始1 終了15 間隔3
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
[1, 4, 7, 10, 13]