An Embedded Engineer’s Blog

とある組み込みエンジニアの備忘録的なブログです。

Python学習メモ - その6

まえがき

最近、Python を勉強し始めたので、その学習メモです。

今回はリスト(List)についてです。


リスト(List)

リストは前回説明したタプルと同様、複数のデータをまとめて扱う場合に使用しますが、タプルとの違いは要素の追加や挿入、削除などが可能なことです。
また、タプルの各要素は変更不可(イミュータブル)ですが、リストの要素は値を編集することができます(ミュータブル)。
そのため、名前の通りTODOリストや顧客リストといった大量かつ編集可能な情報を取り扱う場合によく使用されます。


リスト定義 & アクセス

リストもタプルと同様複数のデータをカンマ( , )で区切りますが、前後に大かっこ「[ ]」をつけることでリストとして認識されます。
リストは、タプルと同様データの各要素へのアクセスは"[i]"で行います。
インデックス i は 0 〜 n-1 (n : 要素数)となります。
※ リストの要素へのアクセスは0ベースインデックスとなります

list_values = [1, 2, 3]

print(list_values)
print(list_values[0])
print(list_values[1])
print(list_values[2])

実行結果

[1, 2, 3]
1
2
3


複数型

タプルと同様、異なる型のデータを混在させることができます。

list_values = [1, 3.14, "list"]

print(list_values)

実行結果

[1, 3.14, 'list']


値の変更

リストでは、指定したインデックスの要素を変更することができます。

list_values = [1, 2, 3]

print(list_values)

list_values[1] = 4

print(list_values)

実行結果

[1, 2, 3]
[1, 4, 3]


空リスト

空(要素数0)のリストを作成したい場合には、「[]」のみを記述します。

list_values = []

print(list_values)

実行結果

[]


要素の追加

appendメソッドを使用することで要素の追加が可能です。

list_values = []
list_values.append(1)
list_values.append(3.14)
list_values.append("list")

print(list_values)

実行結果

[1, 3.14, 'list']


要素の挿入

insertメソッドを使用することで、指定したインデックス位置に要素を挿入することができます。

list_values = []
list_values.append(1)
list_values.append(3.14)
list_values.append("list")

list_values.insert(2, 2 + 3j)

print(list_values)

実行結果

[1, 3.14, (2+3j), 'list']


要素の削除(値検索)

指定した値を検索して要素を削除するには、removeメソッドを使用します。
※ 同じ値の要素が複数存在する場合は、先頭から探して最初に見つかった要素のみが削除されます

list_values = [1, 2, 3, 1, 2, 3]

list_values.remove(3)

print(list_values)

実行結果

[1, 2, 1, 2, 3]


要素の削除(インデックス指定)

指定したインデックスの要素を削除するには、del演算子を使用します。

list_values = [1, 2, 3, 1, 2, 3]

del list_values[1]

print(list_values)

実行結果

[1, 3, 1, 2, 3]


要素の取り出し

popメソッドを使用することで、指定したインデックスの要素を取り出し(取得 & 削除)することができます。

list_values = [1, 2, 3, 1, 2, 3]

pop_value = list_values.pop(2)

print(pop_value)
print(list_values)

実行結果

3
[1, 2, 1, 2, 3]


リストのクリア

リストのすべての要素をクリアするには、clearメソッドを使用します。

list_values = [1, 2, 3, 1, 2, 3]

list_values.clear()

print(list_values)

実行結果

[]


インデックス検索

指定した値を持つ要素のインデックス番号を取得したい場合は、indexメソッドを使用します。
※ 同じ値の要素が複数存在する場合は、先頭から探して最初に見つかった要素のインデックスが返されます

list_values = [1, 2, 3, 1, 2, 3]

index = list_values.index(3)

print(index)

実行結果

2


指定要素数取得

指定した値を持つ要素の数を取得したい場合は、countメソッドを使用します。

list_values = [1, 2, 3, 1, 2, 3]

count = list_values.count(3)

print(count)

実行結果

2


全要素数取得

リスト全体の要素数を取得したい場合はlen関数を使用します。

list_values = [1, 2, 3, 1, 2, 3]

count = len(list_values)

print(count)

実行結果

6


ソート(リスト自体)

リストの要素をソート(並び替え)したい場合はsortメソッドを使用します。

list_values = [2, 5, 1, 3, 4]

list_values.sort()

print(list_values)

実行結果

[1, 2, 3, 4, 5]


ソート(ソートされた新しいリスト)

あるリストに対してソートされた新しいリストを生成したい場合はsorted関数を使用します。

list_values = [2, 5, 1, 3, 4]

soreted_list = sorted(list_values)

print(soreted_list)

実行結果

[1, 2, 3, 4, 5]


コピー

リストの複製を作成したい場合は、copyメソッドを使用します。
Pythonではミュータブルなオブジェクトの代入は参照をコピーします。
例えば、下記のsrc_list_valuesをdst_list_values1に代入していますが、これらは内部的には同じオブジェクトを指しています。
そのため、代入先のdst_list_valuesの値を書き換えたり要素を追加しても、その変更がsrc_list_valuesにも反映されてしまいます。


そういった問題を回避するために、copyメソッドでは、すべての要素を複製した新しいオブジェクトを作成して返します。
これにより、src_list_valuesとは別物のオブジェクトとなるため、値を書き換えたり要素を追加しても、その変更がsrc_list_valuesに反映されなくなります。


なお、copyメソッドは浅いコピー(shallow copy)といって、階層化されたデータのコピーには対応していません。
長くなるのでその辺の話は別の機会にしようと思います。

src_list_values = [1, 2, 3, 4, 5]
dst_list_values1 = src_list_values
dst_list_values2 = src_list_values.copy()

print(src_list_values)
print(dst_list_values1)
print(dst_list_values2)

print()

src_list_values[2] = 10
dst_list_values1[4] = 20
print(src_list_values)
print(dst_list_values1)
print(dst_list_values2)

実行結果

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

[1, 2, 10, 4, 20]
[1, 2, 10, 4, 20]
[1, 2, 3, 4, 5]


拡張

extendメソッドを使用することで、あるリストに新しいリストを追加(拡張)することができます。

list_values1 = [1, 2, 3]
list_values2 = [4, 5, 6]

list_values1.extend(list_values2)

print(list_values1)

実行結果

[1, 2, 3, 4, 5, 6]


結合

2つ以上のリストを結合した新しいリストを作成したい場合は + 演算子を使用することができます。

list_values1 = [1, 2, 3]
list_values2 = [4, 5, 6]

list_values3 = list_values1 + list_values2

print(list_values3)

実行結果

[1, 2, 3, 4, 5, 6]


存在確認

リストの中に特定の値が含まれているかを確認したい場合は、in演算子を使用します。

list_values = [1, 2, 3]

print(2 in list_values)

実行結果

True


逆に、リストの中に特定の値が含まれていないことを確認したい場合は、not in 演算子を使用します。

list_values = [1, 2, 3]

print(4 not in list_values)

実行結果

True


最大・最小値

リスト内の最大・最小値を求めたい場合は、max関数、min関数を使用します。

list_values = [1, 2, 3]

print(max(list_values))
print(min(list_values))

実行結果

3
1


参考文献

Python 公式リファレンス

https://docs.python.org/ja/3.7/index.html

Python-izm

https://www.python-izm.com/

ゲームを作りながら楽しく学べるPythonプログラミング

エキスパートPythonプログラミング

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)