Pythonのリスト型(list)についての解説

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個のリストで使える正のインデックスは 012 です。fruits[3] にアクセスすると IndexError が発生します。

append()やsort()の戻り値を代入しない

append()sort() は元のリストを直接変更し、戻り値として None を返します。

fruits = ["りんご", "バナナ"]
fruits.append("みかん")

print(fruits)  # ['りんご', 'バナナ', 'みかん']

fruits = fruits.append("みかん") とすると、fruitsNone になってしまうので注意しましょう。

リストを複製するときは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()

練習問題

次の操作を行うプログラムを作ってみましょう。

  1. [70, 85, 90] というリストを scores に代入する
  2. 末尾に 100 を追加する
  3. インデックス0の値を 75 に変更する
  4. for 文ですべての点数を表示する
  5. len() で点数の個数を表示する
解答例を見る
scores = [70, 85, 90]
scores.append(100)
scores[0] = 75

for score in scores:
    print(score)

print("点数の個数:", len(scores))

まとめ

Pythonのリストを使うと、複数の値を順番どおりにまとめ、後から追加・変更・削除できます。まずは次の4つから覚えましょう。

  • [] でリストを作る
  • リスト[インデックス] で要素を取り出す
  • append() で要素を追加する
  • for 文で要素を一つずつ処理する

最初からすべてのメソッドを暗記する必要はありません。実際に短いリストを作り、追加・変更・削除を試すことが理解への近道です。

関連記事

コメント

この記事へのコメントはありません。