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 = 1
x += 1
print(x) # 2
数値型の変換
# 実数を整数に変換
# 小数点以下を切り捨て
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.capitalize()
文字列 str の先頭を大文字、残りを小文字にした文字列を返す
str = "aBcDe"
print(str.capitalize()) #
Abcde
str.casefold()
文字列 str の英語以外のアルファベットも、英語のアルファベット小文字化する
str = "aBcDe"
print(str.casefold())
abcde
str.center(width, fillchar)
元の文字列 str
を中央に配置した、長さ width
の文字列を生成する、足りない部分は文字列 fillchar
(デフォルトはスペース)で埋める。
str = "aBcDe"
print(str.center(10, "x"))
#### str.count(sub, start, end)
文字列 str
内にある部分文字列 sub
が出現する個数を数える。指定された場合は star
文字目から end
文字目の間を検索する。
マッチする個数を数えるとき、一度マッチした部分は以降の検索では除外される。
# 部分文字列のカウント
str2 = "aaaaaAAAAAaaaaaAAAAA日本語はどうですか日本語"
print(str2.count("日本語"))
print(str2.count("aa",3))
print(str2.count("aa",3, 13))
2
3
2
str.endswith(suffix, start, end)
文字列 str
が文字列 suffix
で終わる場合は True
を返す。指定された場合は start
番目から end
番目までの部分文字列を判定する。
str.find(sub, start, end)
文字列 str
に部分文字列 sub
が含まれる場合、その最小のインデックスを返します。インデックス start
, end
が指定されたら部分文字列 str[start:end]
の中で検索します。sub
が見つからなかった場合 -1 を返します。
"Python".find("th")
# 2
文字列 str
に部分文字列 sub
が存在するかどうかだけを知りたい場合には in
を使う。
"Py" in "Python"
# True
str.index(sub, start, end)
str.find()
と同じだが、sub
が見つからないとき ValueError
を送出する。
ファイルを文字列として読み込む
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`
# テンプレート内の {数字} はformat()関数に与えた引数の位置として解釈される
template = 'SELECT size_bytes FROM `{0}.{1}.{2}`'
print(template.format(project, dataset, table))
# SELECT size_bytes FROM `my_project.my_dataset.my_table`
f文字列を使った方法
こちらの方が format メソッドより簡単だが、テンプレート文字列をオブジェクトして保存した場合には使えない
project = 'my_project'
dataset = 'my_dataset'
table = 'my_table'
# f文字列を使った方法、変数内の値が展開される
print(f'SELECT size_bytes FROM `{project}.{dataset}.{table}`')
str.format_mapping(mapping)
# dict型の値を作成
d = {"name": "Mike", "country": "America"}
# dict を使ってテンプレート文字列を置換する
str = '{name} was born in {country}'
str.format_map(d)
文字列種の判定
- str.isalnum()
- str.isalpha()
- str.isascii()
- str.isdecimal()
- str.isdigit()
- str.isidentifier()
- str.islower()
- str.isnumeric()
- str.isprintable()
- str.isspace()
- str.istitle()
- str.isupper()
シーケンスコンテナ
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[0])
print(p[1])
# 属性名から値にアクセス
z = p.x + p.y
print(z)
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]