さつまろぐ

CAEとかプログラムとか、出来たことの記録など、誰かのお役に立てれば幸い。

Pythonで遊ぶ シーケンス1

プログラミングでは、データ要素のまとまりを一つの単位として扱うと便利なことがある。 このデータの集合を扱うのに、一番わかりやすいのは要素に番号を振って順番に並べること。 こうした構造を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]

見た目は複雑だが、一つ一つ見れば難しいことはしていない。

広告