この記事では、Pythonのリスト型(list)について、基本的な使い方から実践的なテクニックまで詳しく解説する。
リスト型とは何か
リスト型は、様々なデータ型の要素を格納でき、順序付けられ、変更可能(mutable)なデータ型だ。異なる種類のオブジェクトを順番に並べて保管できる便利な仕組みである。
リストの基本的な作成方法
リストは角括弧[]で囲んで宣言し、要素はカンマで区切って記述する。
# 空のリスト
empty_list = []
# 整数のリスト
numbers = [1, 2, 3, 4, 5]
# 様々な型を含むリスト
mixed = [1, "Hello", 3.14, True]
# ネストされたリスト(リストの中にリスト)
nested = [1, [2, 3], [4, 5, 6]]
print(f"整数リスト: {numbers}")
print(f"混合リスト: {mixed}")
リストのメモリ構造
リストは内部的に、各要素への参照(ポインタ)を保持している。これにより、異なる型の要素を効率的に管理できる仕組みになっている。
my_list = [5, 6, "Hello"]
# リストの長さを取得
print(f"リストの長さ: {len(my_list)}") # 3
# リストの型を確認
print(f"データ型: {type(my_list)}") # <class 'list'>
インデックスによる要素へのアクセス
リストの要素には、0から始まるインデックス番号を使ってアクセスできる。負のインデックスを使えば、末尾から数えることも可能だ。
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう", "メロン"]
# 正のインデックス(先頭から)
first = fruits[0] # "りんご"
third = fruits[2] # "オレンジ"
# 負のインデックス(末尾から)
last = fruits[-1] # "メロン"
second_last = fruits[-2] # "ぶどう"
print(f"最初の果物: {first}")
print(f"最後の果物: {last}")
# インデックスの範囲外アクセスはエラーになる
# print(fruits[10]) # IndexError: list index out of range

【Udemy】Python入門講座(0からPythonの基礎を体系的に学んで、生成AIでバイブコーディング)
受講生3000人ほどの人気講座。Pythonの基礎から生成AI活用までを20時間ほどで一気に学びます。業務で活かせるPythonの基礎知識はしっかりと身につきます。
リストへの要素の追加
リストは作成後も要素を自由に追加できる。用途に応じて複数の方法が用意されている。
単一要素の追加
append()メソッド: リストの末尾に単一要素を追加する insert()メソッド: 指定したインデックス位置に要素を挿入する
my_list = [1, 2, 3]
# 末尾への要素の追加
my_list.append(4)
print(my_list) # [1, 2, 3, 4]
# 特定の位置への要素の挿入
my_list.insert(1, "新要素")
print(my_list) # [1, "新要素", 2, 3, 4]
複数要素の追加
extend()メソッド: 別のリストの要素を現在のリストに追加する +演算子: 2つのリストを結合して新しいリストを作成する
my_list = [1, 2, 3]
# リストの拡張(別のリストの要素を追加)
my_list.extend([4, 5, 6])
print(my_list) # [1, 2, 3, 4, 5, 6]
# + 演算子を使った結合(新しいリストを作成)
new_list = my_list + [7, 8, 9]
print(new_list) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
リストからの要素の削除
要素の削除にも複数の方法があり、それぞれ異なる特徴を持っている。 remove()メソッド: 指定した値と一致する最初の要素を削除する pop()メソッド: 指定したインデックスの要素を削除し、その値を返す clear()メソッド: リスト内のすべての要素を削除する
my_list = [1, 2, 3, 4, 3, 5]
# 値を指定して削除(最初に見つかったもの)
my_list.remove(3)
print(my_list) # [1, 2, 4, 3, 5]
# インデックスを指定して削除し、削除した要素を取得
my_list = [1, 2, 3, 4, 5]
element = my_list.pop(2) # インデックス2の要素を削除
print(f"削除した要素: {element}") # 3
print(my_list) # [1, 2, 4, 5]
# 末尾の要素を削除(インデックス省略)
last_element = my_list.pop()
print(f"最後の要素: {last_element}") # 5
print(my_list) # [1, 2, 4]
# リストをクリア(全要素削除)
my_list.clear()
print(my_list) # []
リストのスライシング
スライシングは、リストから部分リストを抽出する強力な機能だ。基本構文はlist[start:stop:step]となる。
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 基本的な切り出し
slice1 = my_list[2:7] # [2, 3, 4, 5, 6]
slice2 = my_list[1:8:2] # [1, 3, 5, 7] (2文字おき)
slice3 = my_list[:3] # [0, 1, 2] (開始位置省略)
slice4 = my_list[3:] # [3, 4, 5, 6, 7, 8, 9] (終了位置省略)
# 逆順取得
reverse = my_list[::-1] # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(f"部分リスト: {slice1}")
print(f"2文字おき: {slice2}")
print(f"逆順: {reverse}")
リストの検索と情報取得
リスト内の要素を検索したり、リストの状態を調べる便利なメソッドが用意されている。 count()メソッド: 指定した値がリスト内に何回出現するかをカウントする index()メソッド: 指定した値が最初に現れるインデックスを返す in演算子: 要素がリスト内に存在するかをTrue/Falseで返す
my_list = [10, 20, 30, 20, 40]
# 要素の数を数える
count_20 = my_list.count(20)
print(f"20の出現回数: {count_20}") # 2
# 要素のインデックスを取得(最初に見つかったもの)
index_30 = my_list.index(30)
print(f"30のインデックス: {index_30}") # 2
# 要素の存在確認
exists = 30 in my_list
not_exists = 50 in my_list
print(f"30は存在する: {exists}") # True
print(f"50は存在する: {not_exists}") # False
# 存在しない要素を検索する場合のエラー処理
try:
index = my_list.index(50)
except ValueError:
print("指定した値は見つかりませんでした")

【Udemy】Python入門講座(0からPythonの基礎を体系的に学んで、生成AIでバイブコーディング)
受講生3000人ほどの人気講座。Pythonの基礎から生成AI活用までを20時間ほどで一気に学びます。業務で活かせるPythonの基礎知識はしっかりと身につきます。
ソートと順序変更
リストの要素を並び替える操作も、Pythonでは簡単に実行できる。
破壊的な変更(元のリストを変更)
sort()メソッド: リスト内の要素を直接ソートする(元のリストを変更) reverse()メソッド: リストの要素順序を直接逆順にする(元のリストを変更)
numbers = [3, 1, 4, 1, 5, 9]
# 昇順ソート
numbers.sort()
print(f"昇順: {numbers}") # [1, 1, 3, 4, 5, 9]
# 降順ソート
numbers.sort(reverse=True)
print(f"降順: {numbers}") # [9, 5, 4, 3, 1, 1]
# リストを逆順にする
fruits = ["apple", "banana", "orange"]
fruits.reverse()
print(f"逆順: {fruits}") # ["orange", "banana", "apple"]
非破壊的な変更(新しいリストを作成)
sorted()関数: 元のリストを変更せずに新しいソートされたリストを返す
original = [3, 1, 4, 1, 5, 9]
# sorted()関数を使用(元のリストは変更されない)
sorted_asc = sorted(original)
sorted_desc = sorted(original, reverse=True)
print(f"元のリスト: {original}") # [3, 1, 4, 1, 5, 9]
print(f"昇順ソート: {sorted_asc}") # [1, 1, 3, 4, 5, 9]
print(f"降順ソート: {sorted_desc}") # [9, 5, 4, 3, 1, 1]

【Udemy】Python入門講座(0からPythonの基礎を体系的に学んで、生成AIでバイブコーディング)
受講生3000人ほどの人気講座。Pythonの基礎から生成AI活用までを20時間ほどで一気に学びます。業務で活かせるPythonの基礎知識はしっかりと身につきます。
リストと文字列の相互変換
リストと文字列は、相互に変換できる便利な関係にある。 split()メソッド: 文字列を指定した区切り文字でリストに分割する join()メソッド: リストの要素を指定した区切り文字で結合して文字列にする
# 文字列をリストに分割
text = "Python programming is fun"
words = text.split() # 空白で分割
print(f"単語リスト: {words}") # ["Python", "programming", "is", "fun"]
# 特定の文字で分割
csv_data = "apple,banana,orange"
fruits = csv_data.split(",")
print(f"果物リスト: {fruits}") # ["apple", "banana", "orange"]
# リストを文字列に結合
word_list = ["Hello", "World", "Python"]
sentence = " ".join(word_list) # 空白で結合
print(f"文章: {sentence}") # "Hello World Python"
# 特定の区切り文字で結合
hyphenated = "-".join(["2025", "01", "15"])
print(f"日付: {hyphenated}") # "2025-01-15"