環境設定 数値 文字列 正規表現 リスト タプル 集合 辞書 ループ 関数 クラス データクラス 時間 パス ファイル スクレイピング その他

Pythonのリストの使い方:初期化、要素の追加と削除、forループでの処理、タプルや集合との違いなど

最終更新日 2023.02.18

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 はリストです。集合は中かっこでくくります。集合はリストと同じように「変更可能」ですが、順番がありません。

  • リストは順番がある
  • 集合は順番がない

集合は順番がないため「何番目」という概念がありません。したがって上のコードはエラーです。