Pythonのリストの使い方:初期化、要素の追加と削除、forループでの処理、タプルや集合との違いなど
Python のリストとは要素が集まったものです。
x = [1, 2, 3, 4]
y = ['a', 'b']
x も y もリストです。リストは順番を持つため、次の 2 つは違うリストとして扱われます。
a = [1, 2, 3, 4]
b = [4, 3, 2, 1]
Python のリストを初期化する
Python のリストはカッコで初期化します。
a = []
私は Python の前に C 言語(と C++)を使っていたので、こうした宣言はとてもありがたいものに感じました。初期化されたリストに要素を追加してみましょう。
a = []
a.append(1)
print(a)
# [1]
要素の追加は append で行います。後でざっくり説明しますが、Python のリストは便利な操作をたくさん持っています。
応用(オブジェクト指向プログラミングに慣れている人に向けて)
Python のリストを継承してオリジナルのクラスを作ることができます。それらはリストの強力なメソッドを利用できます。
Python のリストに要素を追加する
Python のリストに要素を追加するときは append を使います。
a = [1, 2, 3]
a.append('a')
print(a)
# [1, 2, 3, 'a']
追加された要素は一番後ろにつきます。append の結果、a が変わりました。append は自身を操作する関数です。
Python のリストに別のリストを加えることもできます。
a = [1, 2, 3]
b = ['a', 'b']
c = a + b
print(c)
# [1, 2, 3, 'a', 'b']
b の要素が a の後ろにつきました。
Python のリストから要素を削除する
Python のリストから要素を削除するときは remove を使います。
a = [1, 2, 3]
a.remove(1)
print(a)
# [2, 3]
削除は追加よりもやっかいです。それは「存在しない要素を削除する」ときにエラーとなるからです。
a = [1, 2, 3]
a.remove(4)
print(a)
# ValueError: list.remove(x): x not in list
remove を使うときは、削除したい要素が存在するかどうかを確かめましょう。
Python のリストの要素数を求める
リストの要素数は len で求めます。
x = [1, 2, 3]
y = ['a', 'b']
cx = len(x)
cy = len(y)
print(cx) # 3
print(cy) # 2
x は 3 つの要素を持っているので len が 3 を返しています。初期化されたばかりのリストはどうでしょうか。
x = []
cx = len(x)
print(cx) # 0
要素数は 0 です。
Python のリストをループで使う
リストはしばしばループで使われます。
x = [1, 2, 3]
for v in x:
print(v)
x というリストから要素を順番に取り出しています。出力を見てください。
1
2
3
「あるリストをもとになにかを計算する」という処理はプログラミングでよくあります。
x = [1, 2, 3]
for v in x:
a = v * 2
print(a)
出力:
2
4
6
Python のリストから要素を取り出す
リストから n 番目の要素を取り出してみましょう。
x = [1, 2, 3]
x0 = x[0]
x1 = x[1]
x2 = x[2]
print(x0) # 1
print(x1) # 2
print(x2) # 3
リスト x に大かっこをつけて、中に 0 や 1 を入れました。0 番目の数は 1 で、1 番目の数は 2 です。Python に限らず、ほぼすべてのプログラミング言語は最初の要素を 0 番目とします。
…ここまでは他言語から Python にきたプログラマーにとって当たり前の話かもしれません。ここからが刮目してほしいポイントです。
x = [1, 2, 3]
print(x[-3]) # 1
print(x[-2]) # 2
print(x[-1]) # 3
print(x[0]) # 1
print(x[1]) # 2
print(x[2]) # 3
なんと Python はマイナスの添字を許可します。しかし正の範囲をオーバーするとエラーになります。
x = [1, 2, 3]
print(x[3])
# IndexError: list index out of range
3 番目の要素はないのでエラーが起きています。
問題:[1, 2, 3] から [2, 4, 6] というリストを作る
上のコードを参考にして [2, 4, 6]
というリストを作ってください。
…
答えは次のようになります。
x = [1, 2, 3]
y = []
for v in x:
a = v * 2
y.append(a)
print(y)
# [2, 4, 6]
ループと append を使って新しいリストを作ることができました。
Python のリストに似た別のもの:タプルと集合
Python にはタプルと集合があります。初めて Python を学ぶ人はこれらを無視してもいいかもしれません。実際、タプルと集合を使う場面はリストほどないでしょう。タプルはデータベース関係でよく出てきます。
まずはタプルから見てみましょう。
x = (1, 2, 3)
x.append(5)
# AttributeError: 'tuple' object has no attribute 'append'
Python のタプルは要素が集まったもので、丸かっこでくくります。リストは大かっこ、タプルは丸かっこです。タプルは一度宣言されたら、二度と変更できません。したがって append という関数はそもそもありません。
- リストは変更可能
- タプルは変更不可能
リストにある関数の多くはタプルに使うことはできません。
続いて集合を見てみましょう。
x = {1, 2, 3}
y = [1, 2, 3]
print(x[0])
print(y[0]) # 1
# TypeError: 'set' object is not subscriptable
x は集合、y はリストです。集合は中かっこでくくります。集合はリストと同じように「変更可能」ですが、順番がありません。
- リストは順番がある
- 集合は順番がない
集合は順番がないため「何番目」という概念がありません。したがって上のコードはエラーです。