【Python】リスト型の使い方

スポンサーリンク

Pythonのリスト型について使い方をまとめました。まだ勉強してる段階なので新しいことが見つかったら随時追加していきます。

リストの生成

Python のリストはカンマで区切ったデータを角括弧 [ ] で括ると作成できます。リストの要素はすべて同じ型にする必要はありません。list()で引数に iterable なオブジェクト(文字列やタプル)を指定するとリストに変換されます。

>>> ints = [100, 200, 300, 400, 500]
>>> strs = ["hoge", "fuga", "bar", "foo", "piyo"]
>>> mixs = [["egg", 100], ["meat", 200], ["fish", 300]]   # リストをネストした状態

# 空のリスト
>>> empty = []
>>> empty = list()

len()で要素数をカウントします。type()で型を確認すると list になっています。

>>> len(ints)
5
>>> type(ints)
<type 'list'>

リストの内包表記

リストの内包表記とは、式、for 節、その後ろに続くゼロ個以上の for 節または if 節からなります。結果として得られるリストの要素は、式を for と if 節のコンテキストで評価した値になります。式をタプルとして評価したいなら、丸括弧で囲います。これに関しては実際に見た方が理解し易いと思います。

>>> strs = ["hoge", "fuga", "bar", "foo", "piyo"]
>>> comps = [val.upper() for val in strs if len(val) == 3]
>>> comps
['BAR', 'FOO']

上記を分解した形が次の通りです。

>>> strs = ["hoge", "fuga", "bar", "foo", "piyo"]
>>> comps = []
>>> for val in strs:
...     if len(val) == 3:
...         comps.append(val.upper())
... 
>>> comps
['BAR', 'FOO']

 5.1.4. リストの内包表記 — Python 2.7ja1 documentation

リスト要素のアクセス

リストのインデックスは 0 から開始します。アクセスするには角括弧 [ ] でインデックスを指定してください。リストの範囲を超えたインデックスを指定するとエラーが発生します。

>>> ints[1]
200
>>> ints[1] = "hoge"
>>> ints[1]
'hoge'
>>> ints[5]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
IndexError: list index out of range

インデックスを -1, -2, -3...と指定すると要素の最後からアクセスすることができます。

>>> ints[-1]
500
>>> ints[-2]
400

スライス表記

スライス表記はシーケンスオブジェクト (文字列、タプルまたはリスト) における要素の範囲を選択します。構文は[from:until:step]で表されて引数は3つ指定できますが、それぞれ省略可能です。3つめの引数は間隔を指定しますがあまり使う事はなさそうです。

>>> strs[:]   # 先頭から最後まで
['hoge', 'fuga', 'bar', 'foo', 'piyo']
>>> strs[2:]   # インデックス 2 から最後まで
['bar', 'foo', 'piyo']
>>> strs[:3]   # 最初からインデックス 3 - 1 まで
['hoge', 'fuga', 'bar']
>>> strs[0:4:2]   # インデックス 0 から 5 - 1 まで 2 間隔で
['hoge', 'bar', 'piyo']

リストの繰り返し処理

リストの繰り返し処理には for 文を使用します。

# リストの内容を順番に取り出す
>>> for val in strs:
...     print(val)
...
hoge
fuga
bar
foo
piyo
# range と len でインデックスの範囲を取得
>>> for i in range(len(ints)):
...     print(ints[i])
...
100
200
300
400
500

リストのメソッド

リスト型にはいくつかメソッドがありますので、それぞれの使い方について以下にまとめます。

要素の追加

list.append(x)でリストの末尾に要素 x を追加します。list.insert(i, x)では指定した位置に要素を挿入します。第1引数のインデックス i の場所に、第2引数で指定した要素 x が追加され、挿入したインデックス以降にあった要素は1つずつ後ろにずれます。

>>> ints.append(600)
>>> ints
[100, 200, 300, 400, 500, 600]
>>> ints.insert(3, 999)
>>> ints
[100, 200, 300, 999, 400, 500, 600]

要素の削除

list.pop(i)でリスト中の指定された位置にある要素をリストから削除して、その要素を返します。インデックスが指定されなければ、a.pop()はリストの末尾の要素を削除して返します。

>>> strs.pop(3)
'foo'
>>> strs
['hoge', 'fuga', 'bar', 'piyo']
>>> strs.pop()
'piyo'
>>> strs
['hoge', 'fuga', 'bar']

list.remove(x)ではリスト中の値 x を持つ最初の要素を削除します。該当する項目がなければエラーとなります。

>>> strs.remove('fuga')
>>> strs
['hoge', 'bar']
>>> strs.remove('fuga')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: list.remove(x): x not in list

リストの拡張

リスト同士で+演算子を使用すると2つのリストが連結されて新しいリストが作成されます。この場合は既存のリストは変更されません。

>>> strs + ints
['hoge', 'bar', 100, 200, 300, 999, 400, 500, 600]

list.extend(L)を実行すると、引数で指定したリスト中のすべての要素を対象のリストに追加して拡張します。

>>> strs.extend(ints)
>>> strs
['hoge', 'bar', 100, 200, 300, 999, 400, 500, 600]

要素の確認

list.index(x)はリスト中で、値 x を持つ最初の要素のインデックスを返します。該当する項目がなければエラーとなります。list.count(x)はリスト中で、値 x を持つ要素の数を返します。

>>> strs.index(999)
5
>>> strs.index('fuga')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: 'fuga' is not in list
>>> strs.count(999)
1
>>> strs.count('fuga')
0

要素の並べ替え

list.sort()リストの項目を並べ替えることができます。引数を与えなければ単純に昇順でソートされますが、引数を与えることで色々とカスタマイズ可能です。この点に関しては別途ソートについての記事を書きたいと思います。list.reverse()はリストの要素を、逆順にします。昇順、降順は関係ありません。

>>> strs.sort()
>>> strs
[100, 200, 300, 400, 500, 600, 999, 'bar', 'hoge']
>>> strs.reverse()
>>> strs
['hoge', 'bar', 999, 600, 500, 400, 300, 200, 100]

要素の出現回数をカウント

list.count(x)はリストの要素 x の出現回数を返します。

>>> data = [1, 2, 3, 1, 3, 1]
>>> data.count(1)
3

 5. データ構造 — Python 3.4.3 ドキュメント