今日のPython
タプル
タプルとは
リストによく似たデータ型。書き換えることができない。
タプルを定義する
p.62
>>> t = (1, 2, 3, 4, 5) >>> t (1, 2, 3, 4, 5)
丸カッコでくくる。
書き換えられないけど
タプル同士を連結して新しいタプルを作ることはできる。
p.63
>>> t1 = (1, 2, 3) >>> t2 = (4, 5, 6) >>> t3 = t1 + t2 #連結 >>> t3 (1, 2, 3, 4, 5, 6)
タプルの利点
タプルは辞書のキーにできる。
>>> dict = { (1, 2, 3):"tuple_key"} >>> dict[(1, 2, 3)] 'tuple_key'
リストで同じことをやるとエラー。
>>> dict = { [1, 2, 3]:"list_key"} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: list objects are unhashable
型のエラー:リストオブジェクトはハッシュにできないよ!
かな?
組み込み型のまとめ
p.65 「コレクション型の分類」
シーケンス型 | マップ型 |
---|---|
文字列,リスト,タプル | 辞書 |
シーケンス型は、要素を順番に並べる型。マップ型は、キーと値のペアで要素を管理する。
「変更可能性による組み込み型の分類」
変更可能 | 変更不可能 |
---|---|
リスト,辞書 | 文字列,タプル |
変更可能な組み込み型は、要素を追加したり変更・削除するといった操作が可能。
リストとタプルの相互変換
p.67
>>> l = [1, 2, 3] >>> t = (4, 5, 6) >>> a = list(t) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'list' object is not callable >>> a = tuple(l) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object is not callable
みんPyによるとこれでリストとタプルの相互変換ができるはずなのに、エラーが・・・
「リスト/タプルオブジェクトは呼び出せません」? なぜだ!
条件分岐
if文
p.70
>>> bmi = 23.0 >>> if bmi < 18.5: ... print u"やせ" ... elif 18.5 <= bmi < 25.0: ... print u"標準" ... elif 25.0 <= bmi < 30.0: ... print u"肥満" ... elif bmi >= 30.0: ... print u"ピザデブ" ... 標準
if 条件:
[tab] 処理
elif 条件:
[tab] 処理
else 条件:
[tab] その他処理
って感じ。
18.5 <= bmi < 25.0 こんな風に挟み込んで書けるの面白いね。Cとかなら、
bmi >= 18.5 && bmi < 25.0 こんな風になるのに。
あと、演算子は基本的にCとかJavaと同じのが使えてる。
for文
Pythonのfor文は特殊です!
繰り返し変数とシーケンス(リスト)を用意し、シーケンスの要素が順番に繰り返し変数に代入される。
p.81
>>> n = range(10) # 0〜9のリストを作成 >>> n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> for item in n: ... print item ... 0 1 2 3 4 5 6 7 8 9 >>> for item in n: ... print item, #改行せずに出力 ... 0 1 2 3 4 5 6 7 8 9
組み込み関数range()は、0〜カッコ内の数字-1 までの数値リストを作る。
例 : range(5) == [0, 1, 2, 3, 4]
通常、print文は出力のあと改行する。だが、print文の最後に,(コンマ)を記述すると、改行せずに空白を出力する*1。最後の要素を出力したあと改行してる気がするけど、どうなってるんだろう?
少しだけスマートに書く(シーケンスをあらかじめ変数に代入しない)
p.82
>>> for item in range(10): ... print item, ... 0 1 2 3 4 5 6 7 8 9
シーケンスの範囲を指定
p.82
>>> for item in range(5, 10): # 5〜9のリストを作成 ... print item, ... 5 6 7 8 9
n個おきのリスト
p.82
>>> for item in range(10, 50, 5): # 10〜49で、5個おきのリスト ... print item, ... 10 15 20 25 30 35 40 45
今日はここまで
うぅ・・・序盤なのに20ページしか進まなかった;
しかし組み込み関数が充実していることを改めて実感。
*1:p.67のコラムより