順番に読み進めながら学べます

リスト型 (list) の使い方

Python のリスト型 list を基礎から解説します。宣言・インデックス・スライスから append / sort などの主要メソッドの使い方まで、一通り図解で押さえます。

リストを作る

リスト (list) を用いると、複数の値をまとめて入れられます。変数に 1 つしか値を入れられない int や str とは違い、リストはいくつでも値を並べて保持できます。

宣言は [] で囲み、値をカンマ区切りで書きます。

リストの中身とインデックス
102030400123

文字列と同じように、0 始まりのインデックスで取り出します[0] で先頭、[-1] で末尾を指定できます。

中の値は後から書き換えられるのもリストの特徴です。

# リストの宣言
numbers = [10, 20, 30, 40]

# 空リスト(あとで追加する想定)
empty = []

# 取り出し
print(numbers[0])     # 10
print(numbers[-1])    # 40

# 書き換え
numbers[1] = 99
print(numbers)        # [10, 99, 30, 40]

# 違う型を混ぜて入れてもよい
mixed = [1, "apple", 3.14, True]
print(mixed[1])       # apple

多重リスト(リストの中にリスト)

[[1, 2], [3, 4]] のように、リストの中にリストを入れることもできます。取り出すときは data[1][0] のようにインデックスを 2 段で指定します。表形式のデータを扱うときに便利ですが、最初のうちは 1 重のリストだけで十分です。

フルーツの買い物リストを操作してみましょう。

fruits = ["apple", "banana", "grape", "lemon"] を作り、先頭末尾の果物をそれぞれ print() で表示してください。

fruits[1]"orange" に書き換え、リスト全体を print() で表示してください。

Python エディタ

コードを実行してください

スライスで切り出す

リストでも文字列と同じスライス記法が使えます。[開始:終了] で部分リストを、[::ステップ] で飛ばし取りを、[-n:] で末尾 n 個を取り出せます。

スライス結果はリストです

スライスの取り方
[1,2,3,4,5][:3][1, 2, 3]先頭 3 件[1,2,3,4,5][-2:][4, 5]末尾 2 件スライス取り出すスライス取り出す

[:3] は先頭から 3 つ(終了を含まない半開区間)、[-2:] は末尾 2 つ

文字列のスライスとまったく同じ考え方で動きます。

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

print(nums[:3])    # [1, 2, 3]
print(nums[2:])    # [3, 4, 5]
print(nums[-2:])   # [4, 5]
print(nums[::2])   # [1, 3, 5](1 つおき)

# 元のリストは変わらない(新しいリストが返る)
print(nums)        # [1, 2, 3, 4, 5]

scores = [72, 85, 91, 68, 77, 95] が用意されています。

① スライスを使って最初の 3 件[72, 85, 91])を取り出して表示してください。

② スライスを使って末尾の 2 件[77, 95])を取り出して表示してください。

Python エディタ

コードを実行してください

要素を追加・削除する

リストには中身を増やしたり減らしたりするメソッドが豊富に用意されています。これらのメソッドは、リスト自体を書き換えます。つまり list.append(...) を呼ぶと、list の中身が直接変わります

メソッド役割
append(x)末尾に 1 つ追加
extend(iterable)別のリストの中身を全部末尾に追加
insert(i, x)位置 i に x を差し込む
remove(x)値 x を左から探して最初の 1 つを削除
pop(i)位置 i の要素を取り出して返す(省略時は末尾)
clear()全部削除して空にする
append と extend の違い
[1, 2, 3].append([4, 5])[1,2,3,[4,5]]入れ子になる[1, 2, 3].extend([4, 5])[1,2,3,4,5]平らに結合呼ぶ結果呼ぶ結果

append は「1 つの要素」として追加

extend は「中身をばらして追加」

渡すのが同じ [4, 5] でも結果が変わります。

box = [1, 2, 3]

# 追加
box.append("apple")       # 末尾に 1 つ
print(box)                # [1, 2, 3, 'apple']

box.extend(["banana", "grape"])  # 中身をばらして末尾に
print(box)                # [1, 2, 3, 'apple', 'banana', 'grape']

box.insert(1, "NEW")      # 位置 1 に差し込み
print(box)                # [1, 'NEW', 2, 3, 'apple', 'banana', 'grape']

# 削除
box.remove("apple")       # 値指定で最初の一致を削除
print(box)                # [1, 'NEW', 2, 3, 'banana', 'grape']

v = box.pop(0)            # 位置 0 を取り出して返す
print(v)                  # 1
print(box)                # ['NEW', 2, 3, 'banana', 'grape']

無いものを remove / pop するとエラー

remove(x)x がリストに無いと ValueErrorpop(i)位置 i が範囲外だと IndexError になります。消す前に if x in box: のように含まれているかをチェックしておくと安全です。

ToDo リストを編集する処理を書いてみましょう。

todo = ["買い物", "ジム"] が用意されています。

append"読書" を末尾に追加してください。

extend["散歩", "勉強"] を末尾にまとめて追加してください。

insert を使って先頭"朝ごはん" を差し込んでください。

remove"ジム" を削除して、最終的なリストを print() で表示してください。

Python エディタ

コードを実行してください

並び替え・検索(sort / reverse / count / index)

リストには並び替え検索のメソッドも用意されています。ここで大事なのが、メソッドが 2 種類あること。

- 中身を書き換えるメソッドsort / reverse) → 結果を受け取らず、リスト自体を直接変える

- 結果を返すだけのメソッドcount / index) → print(list.count(...)) のように戻り値を使う

書き換える vs 返すだけ
sort()reverse()list.sort()(戻り値なし)元のリスト自体が変わるcount()index()n = list.count(x)結果を受け取る呼び方副作用呼び方戻り値

sort / reverse: リスト自体を直接書き換える。受け取らない

count / index: リストは触らず、結果を返す。受け取って使う。

fruits = ["banana", "lemon", "apple", "grape"]

# ① 書き換える系:呼ぶだけでリスト自体が変わる
fruits.sort()
print(fruits)          # ['apple', 'banana', 'grape', 'lemon']

fruits.reverse()
print(fruits)          # ['lemon', 'grape', 'banana', 'apple']

# ② 結果を返す系:戻り値を受け取って使う
nums = [1, 2, 2, 3, 2, 4]
print(nums.count(2))   # 3(2 が 3 つある)
print(nums.index(3))   # 3(3 は 4 番目 = index 3)

print(fruits.sort()) で None が出る理由

よくあるミスが print(fruits.sort()) と書いて None が表示されるパターン。sort()戻り値を返さずfruits直接並び替えます。

先に fruits.sort() を単独で書き、そのあとで print(fruits) の 2 行に分けるのが正解です。

なお、戻り値(メソッドや関数が返してくる値)の仕組みの詳細は、関数やオブジェクト指向の記事で解説します。ここでは「sort / reverse は呼ぶだけで中身が変わる」「count / index= で受け取って使う」の 2 パターンで押さえておけば十分です。

テストの点数リスト scores = [72, 85, 91, 68, 77, 95, 85] を分析してみましょう。

sort() で点数を昇順に並び替え、並び替え後のリストを print() で表示してください。

count() を使って、85 点が何人いるかprint() で表示してください。

Python エディタ

コードを実行してください

この記事では、リストの作り方と取り出しスライス追加・削除、そして並び替え・検索を学びました。

QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1nums = [10, 20, 30] に対して nums.append([40, 50]) を実行した後の nums の中身はどれですか?

Q2items = [3, 1, 4, 1, 5] のとき、print(items.sort()) の出力はどれですか?

Q3data = [10, 20, 30, 40] のとき、data[-2:] の結果はどれですか?