Pythonで複数のデータを順番に管理したいときに使う代表的なデータ構造がリスト(list)
です。
配列のように位置で要素にアクセスでき、後から中身を変えられる柔軟さが魅力です。
本記事では、リストの基本と作り方、よくある使いどころを、初めての方でも手を動かして理解できるように丁寧に解説します。
リスト(list)とは?複数データを順番に管理
リストは、値を順番に並べて管理するコンテナ型です。
文字列や数値などの基本型に加え、辞書や他のリストなども要素にできます。
順序が大切で、後から中身を更新したいときに最適です。
リストの基本(順序・変更可能・重複可)
リストの3つの性質を押さえると、使いどころが見えてきます。
順序を保持すること、変更可能(mutability)であること、同じ値を重複して持てることが重要なポイントです。
つまり、作った順番のまま取り出せる、あとから差し替えや追加・削除ができる、同じ値が複数あっても良いということです。
# 順序・変更可能・重複可の例
nums = [3, 1, 3] # 重複可(3が2つ)
print(nums) # 順序を保持
nums[1] = 2 # 位置を指定して変更(ミュータブル)
nums.append(4) # 末尾に追加
print(nums)
[3, 1, 3]
[3, 2, 3, 4]
扱えるデータ型と混在の可否
リストはPythonのあらゆるオブジェクトを要素にできます。
型の混在も可能です。
ただし、処理や見通しの良さのためには、基本的に同種のデータで揃えるのがおすすめです。
# 混在するデータ型の例
data = [1, "A", True, 3.14, None, {"x": 10}, [9, 8]]
for x in data:
print(x, type(x).__name__)
1 int
A str
True bool
3.14 float
None NoneType
{'x': 10} dict
[9, 8] list
- 関連記事:Noneの意味と使い方
どんな場面で使う?(使いどころの例)
順序が管理の鍵になるタスク一覧や、時系列データ、待ち行列のような用途に向いています。
「この順番で処理したい」「n番目の要素を取り出したい」といった要件がある場合に威力を発揮します。
# 簡単なタスク管理の例
tasks = [] # 空のリストで開始
tasks.append("買い物に行く")
tasks.append("メールを返信する")
tasks.append("請求書を確認する")
print("先頭のタスク:", tasks[0]) # 位置で取得
print("全タスク:")
for i, t in enumerate(tasks, start=1):
print(i, t)
先頭のタスク: 買い物に行く
全タスク:
1 買い物に行く
2 メールを返信する
3 請求書を確認する
リストの作り方(基本の構文)
ここでは、リストの代表的な作り方を段階的にまとめます。
最初はリテラルで作るのがシンプルです。
必要に応じてlist()
やrange()
、split()
などを使い分けます。
リストリテラル([…])の書き方
角かっこ[]
で要素をカンマ区切りにします。
読みやすく、最もよく使われます。
# リテラルでリストを作る
a = [1, 2, 3]
b = ["apple", "banana", "cherry"]
c = [1, "two", 3.0] # 型が混在しても構いません
print(a)
print(b)
print(c)
[1, 2, 3]
['apple', 'banana', 'cherry']
[1, 'two', 3.0]
空のリストを作る([]/list())
空のリストは[]
とlist()
のどちらでも作れます。
好みやコード規約で選びます。
# 空のリストの2通りの作り方
empty1 = []
empty2 = list()
print(empty1, empty2)
[] []
- 関連記事:リストの追加・変更削除
ほかの型から作る(list()で変換)
イテラブル(繰り返し可能)なオブジェクトはlist()
で要素ごとのリストに変換できます。
# tuple → list
t = (10, 20, 30)
print(list(t))
# set → list(集合は順序を持たないため、表示順は保証されません)
s = {3, 1, 2}
print(sorted(list(s))) # 並びを安定化したい場合はsortedで
# str → list(各文字が要素になります)
text = "ABC"
print(list(text))
# dict → list(キーのリストになります。Python 3.7+は挿入順を保持)
d = {"x": 1, "y": 2}
print(list(d)) # ['x', 'y']
print(list(d.items())) # キーと値のタプルのリスト
[10, 20, 30]
[1, 2, 3]
['A', 'B', 'C']
['x', 'y']
[('x', 1), ('y', 2)]
setは順序を持たないため、list(s)の表示順は実行環境により変わることがあります。
rangeで連番リストを作る
連番を作る定番はrange()
です。
開始・終了・ステップを指定できます。
# rangeで連番を作る
print(list(range(5))) # 0から4
print(list(range(2, 10, 2))) # 2から8まで2刻み
[0, 1, 2, 3, 4]
[2, 4, 6, 8]
文字列をsplitしてリスト化
区切り文字で分割してリストにできます。
CSV的なデータ処理の入口にもなります。
# 文字列をsplitしてリスト化
s = "東京,大阪,名古屋"
cities = s.split(",") # カンマで分割
print(cities)
line = "Alice Bob Carol" # 空白が連続する場合
print(line.split()) # 引数なしで連続空白をまとめて分割
['東京', '大阪', '名古屋']
['Alice', 'Bob', 'Carol']
ネストしたリストを作る
2次元配列のように、リストの中にリストを入れることができます。
行列やグリッドデータに便利です。
# 正しい2次元リストの作り方(内包表記)
rows, cols = 2, 3
grid = [[0 for _ in range(cols)] for _ in range(rows)]
grid[0][1] = 1
print(grid)
[[0, 1, 0], [0, 0, 0]]
[[0] * 3] * 2
のように*
で内側のリストを増やすと、同じオブジェクト参照が複製されるため、1箇所を変更すると全行が同時に変わってしまいます。
# よくある落とし穴: * で増やした内側リストは同一参照になる
wrong = [[0] * 3] * 2
wrong[0][0] = 9
print("wrong:", wrong) # 1行変更したつもりが両方変わる
# 正しい方法(各行を独立生成)
right = [[0] * 3 for _ in range(2)]
right[0][0] = 9
print("right:", right)
wrong: [[9, 0, 0], [9, 0, 0]]
right: [[9, 0, 0], [0, 0, 0]]
リストの使いどころと選び方
リストを選ぶ基準が明確だと、他のデータ構造との使い分けが楽になります。
- 関連記事:リスト vs タプル vs セットの違い
「順序」や「位置取り」が要件にあるか、後から変更が必要かを考えます。
順序や位置が重要なデータに最適
処理順やランキング、タイムラインのように、並び順やn番目という位置が意味を持つ場合はリストを選びます。
たとえば、results[0]
が1位、results[-1]
が最後といった位置参照が自然に書けます。
後から値を変えたいならリスト
リストはミュータブルなので、追加・更新・削除を繰り返す用途に強いです。
変わらない固定値の集まりであれば、tuple
(タプル)を選ぶと意図が明確になり、不用意な変更も防げます。
辞書(dict)・集合(set)・タプル(tuple)との使い分け(概要)
それぞれの得意分野を把握しておくと、間違いが減ります。
キーで探したいなら辞書、重複を排除したいなら集合、固定の並びならタプルと覚えておくと便利です。
表: 代表的データ構造の比較(概要)
型 | 順序 | 変更可 | 重複 | 主な用途 |
---|---|---|---|---|
list | あり | あり | あり | 順序付きの列、位置参照、可変なコレクション |
dict | あり(挿入順) | あり | キーは重複不可 | キーと値の対応、検索や参照が中心 |
set | なし | あり | なし | 重複排除、集合演算(和・差・積) |
tuple | あり | なし | あり | 変更しない固定データ、関数の複数戻り値 |
迷ったら「順序・位置が重要か」「値を変える必要があるか」をチェックすると、リストを選ぶべきかどうか判断しやすくなります。
- 関連記事:辞書(dict)の基本的な使い方
- 関連記事:タプル(tuple)の基本的な使い方
- 関連記事:リストの重複を削除するsetの使い方
まとめ
本記事では、Pythonのリスト(list)の基本と作り方、使いどころを解説しました。
リストは順序を持ち、変更可能で、重複を許す柔軟なコレクションです。
リテラル[]
やlist()
、range()
、split()
で作り、必要に応じてネストも使えます。
用途としては、処理順や位置が重要なデータ、後から追加・更新・削除が発生するデータに適しています。
辞書・集合・タプルとの違いを意識して選べば、コードの意図が明確になり、保守もしやすくなります。
まずは小さな配列から手を動かし、リストの取り回しに慣れていきましょう。