ゲームを作りながら楽しく学べるPythonプログラミング
の書籍を元に、気になったもの・多用しそうなものだけをざっくりとまとめた
データ構造は リスト・タプル・辞書の3種類ある
リスト・タプル・集合・辞書の4種類ある
リスト(list)
可変の配列
途中で値の変更、要素の追加・削除ができる
>>> subject = [78, 95, 68, 62] # リスト定義
>>> subject
[78, 95, 68, 62]
>>>
>>> subject[0] = 70 # 値の変更
>>> subject
[70, 95, 68, 62]
>>>
>>> subject.append(34) # 要素の追加
>>> subject
[70, 95, 68, 62, 34]
タプル(tuple)
不変の配列
途中で値の変更、要素の追加・削除ができない
>>> subject = (78, 95, 68, 62) # タプル定義
>>> subject
(78, 95, 68, 62)
>>>
>>> subject[0] = 70 # 値の変更
Traceback (most recent call last): # エラー
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>
>>> subject.append(34) # 要素の追加
Traceback (most recent call last): # エラー
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
アンパック
タプルを各変数に代入することもできる(リストでも可)
>>> pos = (56, 74)
>>> pos_x, pos_y = pos
>>> pos_x
56
>>> pos_y
74
集合(set)
リストと似ているが、
重複した要素は持たない、順番が無いのが特徴
>>> basket={"apple", "orange", "banana"} # setオブジェクト定義. set(["apple", ...])の形でも可
>>> basket
{'orange', 'apple', 'banana'}
>>> basket.add("melon") # 要素追加
>>> basket
{'orange', 'melon', 'apple', 'banana'}
>>> basket.add("apple") # 重複した要素を追加した場合、無視される
>>> basket
{'orange', 'melon', 'apple', 'banana'}
>>>
# 集合の計算も可能
>>> a = {1, 2, 4, 8, 16}
>>> b = {1, 2, 3, 5, 8}
>>> a | b # 和集合
{1, 2, 3, 4, 5, 8, 16}
>>> a & b # 積集合
{8, 1, 2}
>>> a ^ b # 排他的論理和
{16, 3, 4, 5}
>>> a - b # 差集合
{16, 4}
>>> b - a
{3, 5}
辞書(dict)
{キー: 値}
がペアのリスト
可変なので、後から追加・編集も可能
>>> score = {
... "math":78,
... "english":95,
... "chemistry":68,
... "science":62, # 最後に 「,」付いてても エラーにならないのが地味にうれしい
... }
>>> score
{'math': 78, 'english': 95, 'chemistry': 68, 'science': 62}
>>> score["math"] # キーを指定
78
# 追加
>>> score["japanese"] = 23
>>> score["japanese"] # キーを指定
23
# 編集
>>> score["math"] = 68
>>> score["math"] # キーを指定
68
# 辞書の中に辞書も入れられる
>>> score = {
... "math":{
... "mathA":50,
... "mathII":28
... },
... "english":95,
... }
>>> score
{'math': {'mathA': 50, 'mathII': 28}, 'english': 95}
>>>
>>> score["math"]["mathA"] # キーを指定
50
リストやタプル利用する上で便利な関数
copy
指定したリスト、タプルを複製する
辞書でも可能
>>> a = [1,2,3]
>>> b = a.copy()
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
# aの3番目の要素に9を代入
>>> a[2] = 9
>>> a
[1, 2, 9]
# 別参照なので、b[2]は3のまま
>>> b
[1, 2, 3]
>>>
代入の場合は a bともに同じ場所を参照してしまう
>>> a = [1,2,3]
>>> b = a
# aの3番目の要素に9を代入
>>> a[2] = 9
>>> a
[1, 2, 9]
# 同じ場所を参照しているので、b[2]も9
>>> b
[1, 2, 9]
in演算子
ある値がリストやタプルに含まれているか
調べたい値 in リスト/タプル
>>> greets = ("morning", "afternoon", "evening")
>>> "noon" in greets
False
>>> "afternoon" in greets
True
print関数
引数で与えられた情報をコンソールに表示する
>>> print("hello")
hello
# 引数を複数指定することも可能
>>> print("Hi!", "Python", 3)
Hi! Python 3
%演算子を使う方法
"文字列" % ("値")
>>> "1=%s 2=%s" % ("Hello", "World")
'1=Hello 2=World'
>>> "value=(%d, %.1f)" % (2.5, 2.5)
'value=(2, 2.5)'
formatメソッドを使う方法
新しく追加された方法でこっちが主流らしい
python3.6 から新しく f-strings(フォーマット済み文字列リテラル)が追加された。
{}
が埋め込み文字
"埋め込み文字を含めた文字列".format("値")
>>> "1={} 2={}".format("Hello", "World")
'1=Hello 2=World'
>>> "value=({}, {})".format(2, 2.5)
'value=(2, 2.5)'
# {}の中に番号をつけることで、任意の順番にもできる
>>> "value=({1}, {0})".format(2, 2.5)
'value=(2.5, 2)'
# 名前をつけることも可能
>>> "value=({latitude}, {longitude})".format(latitude=35.6, longitude=139.6)
'value=(35.6, 139.6)'
f-strings(フォーマット済み文字列リテラル)を使う方法
python3.6で追加された手法
接頭辞 f
(F
でも可) + "文字列"
>>> latitude = 35.6
>>> longitude = 139.6
>>> f"value=({latitude}, {longitude})"
'value=(35.6, 139.6)