プログラミングでは、データ要素のまとまりを一つの単位として扱うと便利なことがある。 このデータの集合を扱うのに、一番わかりやすいのは要素に番号を振って順番に並べること。 こうした構造をPythonではシーケンスと呼ぶ。 「リスト」「タプル」「文字列」はいずれもシーケンスの一種。
ここではそんなシーケンスに関する文法メモ。
シーケンス概要
リストとタプルはどちらもデータの集合を扱う。
主な違いは「変更ができるかどうか」。
要素を追加や変更する場合はリストを、シーケンスを変更不可にする場合はタプルを使う。
データの集合は、全体を[ ]
(タプルは( )
)で囲い、要素を,
で区切る。
>>> list = [1, 2, 3] #リストは [ ] >>> tuple = (4, 5, 6) #タプルは ( ) >>> list [1, 2, 3] >>> tuple (4, 5, 6) >>> list[1] = 9 #リストは要素を変更可 >>> list [1, 9, 3] >>> tuple[1] =9 #タプルは要素を変更不可 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment
シーケンスの一般的操作
シーケンスに対して「インデックス指定」「スライス指定」「加算」「乗算」などの操作や、 シーケンスの長さ、最大最小の要素を見つけるための関数が用意されている。
インデックス指定
シーケンスのすべての要素には、0から順に番号が振られており、これをインデックス(index)と呼ぶ。
シーケンス名に[ ]
をでインデックスを指定し、要素の取り出しや変更を行う。
先頭のインデックスは1ではなく、0であること注意。
>>> number = [1,2,3,4,5] >>> number[2] 3 >>> number[2] = 9 >>> number [1, 2, 9, 4, 5]
インデックスの最後の要素は-1で指定できる。-2, -3と順に先頭に向かっていく。
>>> number = [1,2,3,4,5] >>> number[-1] 5 >>> number[-3] 3
スライス指定
:
で区切ったインデックスを指定することで、シーケンスの範囲を指定できる。2つ目のインデックスは、欲しい要素番号+1の番号となる。文字列も同様。
>>> number = [1,2,3,4,5,6,7,8,9,10] >>> number[3:6] [4, 5, 6] >>> number[2:9] [3, 4, 5, 6, 7, 8, 9] >>> moji = "あいうえおかきくけこ" >>> moji 'あいうえおかきくけこ' >>> moji[3:5] 'えお'
:
の前(後)のインデックスを省略すると、先頭(最後)まで、を指定することができる。
:
の前後両方のインデックスを省略すると、先頭から最後まで、となりシーケンス全体を表す。
>>> number = [1,2,3,4,5,6,7,8,9,10] >>> number[:5] [1, 2, 3, 4, 5] >>> number[5:] [6, 7, 8, 9, 10] >>> number[:] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[ ]
内に:
をもう一つ追加すると、ステップ長を指定できる。上記のインデックスの省略もできる。
>>> number = [1,2,3,4,5,6,7,8,9,10] >>> number[0:10:1] #0~9番目の要素を、ステップ長1で返す [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> number[0:10:3] #0~9番目の要素を、ステップ長3で返す [1, 4, 7, 10] >>> number[2:8:2] #2~7番目の要素を、ステップ長2で返す [3, 5, 7] >>> number[ : :4] #先頭から最後の要素を、ステップ長4で返す [1, 5, 9]
ステップ長に負の値を指定すると、逆順の値を返す。 このときインデックスは、先に大きいほう、後に小さいほうの数字を指定する。
>>> number = [1,2,3,4,5,6,7,8,9,10] >>> number[8:2:-1] [9, 8, 7, 6, 5, 4] >>> number[10:0:-2] [10, 8, 6, 4, 2] >>> number[::-3] [10, 7, 4, 1]
シーケンスの加算
シーケンスは+
で連結できる。ただし、リストどうし、文字列どうしでないとできない。(型が一致していること)
>>> num1 = [1,2,3,4,5] >>> num2 = [6,7,8,9,10] >>> num3 = num1 + num2 >>> num3 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> aaa = "aaa" >>> bbb = "bbb" >>> aaa + bbb 'aaabbb'
シーケンスの乗算
シーケンスに * n
で乗算すると、元のシーケンスをn回繰り返すシーケンスを返す。
>>> num = [1,2,3] >>> num * 3 [1, 2, 3, 1, 2, 3, 1, 2, 3] >>> hello = "hello" >>> hello * 4 'hellohellohellohello'
空のリスト
要素にNone
を指定すると、何も要素がない(しかし場所はある)、となる。
要素の場所だけを確保する場合や、リストを初期化したいときなどに使える。
>>> kara = [None] * 5 >>> kara [None, None, None, None, None]
ここまでのまとめ
リストの加算、乗算、スライス指定などを使うと書きのような表現もできる。
>>> (([1,2,3] + [4,5])*3)[3: :3] [4, 2, 5, 3]
見た目は複雑だが、一つ一つ見れば難しいことはしていない。