Python 基本 – リスト(配列)

リストは様々なタイプのデーターをまとめて一つのグループにするために利用されます。
違う種類のデータを同時に格納することが出来ますが、通常は同じタイプを使用します。

基本形

整数

>>> numbers = [100, 200, 300, 400, 500]
>>> numbers
[100, 200, 300, 400, 500]

文字列

>>> string = ['string']

リストの中にリスト

リストは入れ子にすることが出来ます。

>>> images = [['image.jpg', [100, 100]], ['image2.jpg', [150, 100]]]

データの取得

リスト内のデータを取得するにはインデックスを指定します。
戻り値はインデックスにあるデータになります

>>> numbers = [100, 200, 300]
>>> numbers[2]
300

インデックスは 0 から始まります。

>>> numbers = [100, 200, 300]
>>> numbers[0]
100
>>> numbers[1]
200
>>> numbers[2]
300

負数を指定すると後ろからの値を指定出来ます

>>> numbers = [100, 200, 300]
>>> numbers[-1]
300
>>> numbers[-2]
200
>>> numbers[-3]
100

リストの中のリストにアクセスするには [添字] を続けて書きます。

>>> images = [['image.jpg', [100, 100]], ['image2.jpg', [150, 100]]]
>>> images[1][0]
'image2.jpg'

スライス

インデックスを : (コロン)で区切るとリストをスライス(切り取り)をすることが出来ます。
戻り値は指定した範囲のリストになります

>>> numbers = [100, 200, 300]
>>> numbers[0:2]
[100, 200]
>>> numbers[1:3]
[200, 300]

添字は省略することが出来ます。初めを省略すると、初めの値から始まります(0を指定したことと同じですかね)
最後を省略すると一番最後の値を指定していることになります。

>>> numbers = [100, 200, 300]
>>> numbers[:2]
[100, 200]
>>> numbers[1:]
[200, 300]

スライスにリストを代入するとその範囲に新たに値を追加することが出来ます。

>>> numbers = [100, 200, 300]
>>> numbers[1:3] = [150, 200, 250, 300]
>>> numbers
[100, 150, 200, 250, 300]

指定の範囲を削除することも出来ます。

>>> numbers = [150, 200, 250, 300]
>>> numbers[:2] = []
[250, 300]

どちらも省略することも出来ます。これはリストのコピーを作成しているのと同じことになります。

>>> numbers[:]
[100, 200, 300]

全ての削除も可能です

>>> numbers[:] = []
>>> numbers
[]

長さを取得

リストの長さを取得するには組み込み関数の len() を使用します

>>> alphabets = ['a', 'b', 'c', 'd', 'e']
>>> len(alphabets)
5

結合

リストには + 演算子を使用することが出来て、リスト同士を結合させることが出来ます。リスト自体に変更は加えません。

>>> numbers = [100, 200, 300]
>>> numbers + [400, 500, 600]
[100, 200, 300, 400, 500, 600]

繰り返し連結

* 演算子を利用することも出来ます。+ はリスト同士を結合して新たなリストを返しますが、
リスト * i
はリストを i の分繰り返した新たなリストを返します。

>>> numbers = [1, 10, 100]
>>> numbers * 3
[1, 10, 100, 1, 10, 100, 1, 10, 100]

追加(append, extend, insert)

+ 演算子はリストを合わせた新しいリストを作成しますが、リスト自体に追加したい場合もあると思います。リストのリストの最後に新たにリストを値を追加するには append() を使用します。

>>> numbers = [100, 200, 300]
>>> numbers.append(400)
>>> numbers
[100, 200, 300, 400]

以下の表現も同様の意味になります。

numbers[len(numbers):] = [400]

別のリストを追加するには extend() を使用します

>>> numbers = [100, 200, 300]
>>> numbers.extend([400, 500, 600])
[100, 200, 300, 400, 500, 600]

以下の表現も同様の意味になります。

numbers[len(numbers):] = [400, 500, 600]

指定した位置に新しく要素を挿入するには insert(i, x) を使用します。
i にインデックス、x に挿入するデータを指定します。i の値の直前に挿入が行われます。

>>> numbers = [100, 200, 300]
>>> numbers.insert(1, 150)
>>> numbers
[100, 150, 200, 300]

削除(remove, del文)

中身の要素を指定して削除するには remove(値) を使用します。 remove は初めに見つかった要素のみを削除します。

>>> numbers = [100, 200, 300, 100, 200, 300]
>>> numbers.remove(200)
>>> numbers
[100, 300, 100, 200, 300]

remove は削除する値を指定しましたが、削除したいインデックスを指定するには del 文を使用します。

>>> numbers = [100, 200, 300, 100, 200, 300]
>>> del numbers[1]
>>> numbers
[100, 300, 100, 200, 300]

del 文はスライスでも使用できます。

>>> numbers = [100, 200, 300]
>>> del numbers[:2]
>>> numbers
[300]

中身だけを全て削除することもできます。

>>> numbers = [100, 200, 300]
>>> del numbers[:]
>>> numbers
[]

変数自体を削除することも出来ます。この場合は、変数に何かが代入されるまではアクセスするとエラーがでます。

>>> numbers = [100, 200, 300]
>>> del numbers
>>> numbers
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'numbers' is not defined

検索(index)

リストのインデックスを値から取得出来ます。初めに見つかったインデックスのみを返します。

>>> numbers = [100, 200, 300, 100, 200, 300]
>>> numbers.index(200)

取り出し: pop([i])

リストの中から指定した値を取り出します。リストから取り出された値は削除されます。i(index) に何も指定しない場合は、リストの末尾の要素を削除して返します。

>>> numbers = [100, 200, 300, 100, 200, 300]
>>> numbers.pop()
300
>>> numbers.pop(2)
300
>>> numbers
[100, 200, 100, 200]

出現回数(count)

指定したリスト内の要素の出現回数をカウントするには count(x) を使用します。

>>> information = ['i', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n']
>>> information.count('i')
2

並び替え(sort)

要素の並び替えを行うには sort() を使用します。数字であれば小さい順、文字列であれば文字コードの並び順でソートが行われます。(In place)

>>> numbers = [1, 33, 35, 6, 763, 10]
>>> numbers.sort()
>>> numbers
[1, 6, 10, 33, 35, 763]

逆順(reverse)

要素の並びを逆順にするには reverse() を使用します。
小技として、sort() で並べ替えると”昇順”になるのですが、sort() の後に reverse() を掛けると”降順”になります。

>>> numbers = [1, 6, 10, 33, 35, 763]
>>> numbers.reverse()
>>> numbers
[763, 35, 33, 10, 6, 1]

リストの内包表記

ループを回した結果をリストにする場合に簡単に表記する方法が内包表記です。
例えば 0 ~ 8 までの偶数のリストを作成したい場合、普通に書くと以下の用になります。

>>> evenNumbers = []
>>> for x in range(0, 10, 2):
...     evenNumbers.append(x)
...
>>> evenNumbers
[0, 2, 4, 6, 8]

これを内包表記に変更すると以下の用になります。

>>> evenNumbers = [x for x in range(0, 10, 2)]
>>> evenNumbers
[0, 2, 4, 6, 8]

初めの x がリストの各要素に代入される結果になり、そこで演算することも可能です。それぞれの半分にした値にする場合、以下の用になります。

>>> numbers = [x*0.5 for x in range(0, 10, 2)]
>>> numbers
[0.0, 1.0, 2.0, 3.0, 4.0]

参考

http://docs.python.jp/3.3/tutorial/introduction.html
http://docs.python.jp/3.3/tutorial/datastructures.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です