Pythonで複数の値をまとめて扱いたいときに使うのが、リスト(list)です。たとえば、3人分の名前や1週間分の気温を、ひとつの変数に順番どおり保存できます。
fruits = ["りんご", "バナナ", "みかん"]
print(fruits) # ['りんご', 'バナナ', 'みかん']
この記事では、リストの作り方から、値の取得・変更・追加・削除・並べ替えまでを順番に解説します。コードを上から実行しながら読むと、リストの基本操作を身につけられます。
リストとは
リストは、複数の値を順番を保ったまままとめるデータ型です。リストに入っている一つひとつの値を「要素」と呼びます。
- 複数の値をひとつの変数に保存できる
- 要素には順番がある
- 作成後に要素を追加・変更・削除できる
- 同じ値を複数入れられる
リストは角括弧([])で囲み、要素をカンマで区切って作ります。空のリストは [] と書きます。
numbers = [10, 20, 30]
names = ["田中", "佐藤", "鈴木"]
empty_list = []
print(numbers) # [10, 20, 30]
print(empty_list) # []
異なるデータ型も同じリストに入れられます。ただし、実際のプログラムでは「名前の一覧」「点数の一覧」のように、同じ意味のデータをまとめると分かりやすくなります。
mixed = [1, "hello", 3.14, True]
print(mixed) # [1, 'hello', 3.14, True]
要素を取り出す
インデックスは0から始まる
リストの要素は、位置を表す番号「インデックス」を使って取り出します。Pythonのインデックスは0から始まる点が重要です。
fruits = ["りんご", "バナナ", "みかん"]
print(fruits[0]) # りんご
print(fruits[1]) # バナナ
print(fruits[2]) # みかん
fruits[1] は「1番目」ではなく、先頭から2番目の要素です。
末尾から数える
負のインデックスを使うと、末尾から要素を取り出せます。-1 が最後の要素、-2 が最後から2番目の要素です。
fruits = ["りんご", "バナナ", "みかん"]
print(fruits[-1]) # みかん
print(fruits[-2]) # バナナ
複数の要素をまとめて取り出す(スライス)
リスト[開始位置:終了位置] と書くと、指定した範囲を新しいリストとして取り出せます。終了位置の要素は含まれません。
numbers = [10, 20, 30, 40, 50]
print(numbers[1:4]) # [20, 30, 40]
print(numbers[:3]) # [10, 20, 30]
print(numbers[2:]) # [30, 40, 50]
numbers[1:4] は、インデックス1からインデックス3までを取り出します。「4の直前まで」と覚えると分かりやすいでしょう。
要素を変更する
変更したい要素のインデックスを指定し、新しい値を代入します。
fruits = ["りんご", "バナナ", "みかん"]
fruits[1] = "ぶどう"
print(fruits) # ['りんご', 'ぶどう', 'みかん']
このように、リストは作成後に内容を変更できます。この性質を「ミュータブル」といいます。
要素数を調べる
len() 関数を使うと、リストにいくつの要素があるか分かります。
fruits = ["りんご", "バナナ", "みかん"]
print(len(fruits)) # 3
要素を追加する
append():末尾に一つ追加する
fruits = ["りんご", "バナナ"]
fruits.append("みかん")
print(fruits) # ['りんご', 'バナナ', 'みかん']
extend():複数の要素を追加する
fruits = ["りんご", "バナナ"]
fruits.extend(["みかん", "ぶどう"])
print(fruits) # ['りんご', 'バナナ', 'みかん', 'ぶどう']
append(["みかん", "ぶどう"]) と書くと、リストそのものが一つの要素として追加されます。複数の要素を個別に追加したいときは extend() を使います。
insert():指定した位置に追加する
fruits = ["りんご", "みかん"]
fruits.insert(1, "バナナ")
print(fruits) # ['りんご', 'バナナ', 'みかん']
insert(1, "バナナ") は、インデックス1の位置に「バナナ」を追加するという意味です。
要素を削除する
remove():値を指定して削除する
fruits = ["りんご", "バナナ", "みかん"]
fruits.remove("バナナ")
print(fruits) # ['りんご', 'みかん']
同じ値が複数ある場合、remove() が削除するのは最初に見つかった一つです。存在しない値を指定すると ValueError になります。
pop():位置を指定して取り出し、リストから削除する
fruits = ["りんご", "バナナ", "みかん"]
deleted = fruits.pop(1)
print(deleted) # バナナ
print(fruits) # ['りんご', 'みかん']
インデックスを省略して pop() と書くと、最後の要素を取り出して削除します。
del:位置を指定して削除する
fruits = ["りんご", "バナナ", "みかん"]
del fruits[0]
print(fruits) # ['バナナ', 'みかん']
リストを繰り返し処理する
for 文を使うと、リストの要素を先頭から一つずつ処理できます。
fruits = ["りんご", "バナナ", "みかん"]
for fruit in fruits:
print(fruit)
実行結果は次のとおりです。
りんご
バナナ
みかん
番号も同時に使いたい場合は enumerate() が便利です。
fruits = ["りんご", "バナナ", "みかん"]
for index, fruit in enumerate(fruits):
print(index, fruit)
値が含まれているか調べる
in を使うと、指定した値がリストに含まれているかを True または False で確認できます。
fruits = ["りんご", "バナナ", "みかん"]
print("バナナ" in fruits) # True
print("ぶどう" in fruits) # False
リストを並べ替える
sort() は元のリストそのものを並べ替えます。数字は小さい順、文字列は辞書順に並びます。
numbers = [30, 10, 20]
numbers.sort()
print(numbers) # [10, 20, 30]
大きい順にする場合は reverse=True を指定します。
numbers = [30, 10, 20]
numbers.sort(reverse=True)
print(numbers) # [30, 20, 10]
元のリストを残したい場合は sorted() を使います。
numbers = [30, 10, 20]
sorted_numbers = sorted(numbers)
print(numbers) # [30, 10, 20]
print(sorted_numbers) # [10, 20, 30]
リスト内包表記で新しいリストを作る
既存のリストを加工して新しいリストを作るときは、リスト内包表記が便利です。最初は通常の for 文に慣れてから使っても構いません。
numbers = [1, 2, 3, 4, 5]
squares = [number ** 2 for number in numbers]
print(squares) # [1, 4, 9, 16, 25]
初心者が間違えやすいポイント
存在しないインデックスを指定しない
要素が3個のリストで使える正のインデックスは 0、1、2 です。fruits[3] にアクセスすると IndexError が発生します。
append()やsort()の戻り値を代入しない
append() や sort() は元のリストを直接変更し、戻り値として None を返します。
fruits = ["りんご", "バナナ"]
fruits.append("みかん")
print(fruits) # ['りんご', 'バナナ', 'みかん']
fruits = fruits.append("みかん") とすると、fruits が None になってしまうので注意しましょう。
リストを複製するときはcopy()を使う
list_b = list_a と書くと、二つの変数が同じリストを指します。一方だけを変更したつもりでも、両方の見た目が変わります。別のリストとして複製したい場合は copy() を使います。
list_a = [1, 2, 3]
list_b = list_a.copy()
list_b.append(4)
print(list_a) # [1, 2, 3]
print(list_b) # [1, 2, 3, 4]
よく使う操作の早見表
| 目的 | 書き方 |
|---|---|
| リストを作る | items = ["A", "B"] |
| 要素を取り出す | items[0] |
| 要素数を調べる | len(items) |
| 末尾に一つ追加する | items.append("C") |
| 複数追加する | items.extend(["C", "D"]) |
| 指定位置に追加する | items.insert(1, "C") |
| 値を指定して削除する | items.remove("A") |
| 位置を指定して取り出し、削除する | items.pop(0) |
| 含まれているか調べる | "A" in items |
| 小さい順に並べ替える | items.sort() |
練習問題
次の操作を行うプログラムを作ってみましょう。
[70, 85, 90]というリストをscoresに代入する- 末尾に
100を追加する - インデックス0の値を
75に変更する for文ですべての点数を表示するlen()で点数の個数を表示する
解答例を見る
scores = [70, 85, 90]
scores.append(100)
scores[0] = 75
for score in scores:
print(score)
print("点数の個数:", len(scores))
まとめ
Pythonのリストを使うと、複数の値を順番どおりにまとめ、後から追加・変更・削除できます。まずは次の4つから覚えましょう。
[]でリストを作るリスト[インデックス]で要素を取り出すappend()で要素を追加するfor文で要素を一つずつ処理する
最初からすべてのメソッドを暗記する必要はありません。実際に短いリストを作り、追加・変更・削除を試すことが理解への近道です。
コメント