閉じる

ゼロからわかるPythonリスト(list)の作り方と使いどころ

Pythonで複数の値を扱うとき、最初に覚えたい基本がリスト(list)です。

リストは順序を保ったまま値をまとめ、後から増やしたり、特定の位置を参照したりできます。

本記事では、作り方のバリエーションと使いどころを、初心者の方にも無理なく理解できるように順を追って解説します。

リスト(list)入門

複数のデータを順番に管理する

順序と位置(インデックス)

リストは中身の順序をそのまま保持する入れ物です。

先頭の要素はインデックス0で表し、次が1、その次が2というように続きます。

最後から数える場合は-1、-2のように負のインデックスを使います。

サンプルコード

Python
# 複数の要素を順番に持つリスト
fruits = ["apple", "banana", "cherry"]

print(fruits)       # リスト全体
print(fruits[0])    # 0番目(先頭)の要素
print(fruits[2])    # 2番目の要素
print(fruits[-1])   # 最後の要素(負のインデックス)
実行結果
['apple', 'banana', 'cherry']
apple
cherry
cherry

リストの特徴 可変 重複可 順序保持

3つの柱

リストには次の特徴があります。

これらは「どんなときにリストを選ぶべきか」を判断する軸になります。

  • 可変(ミュータブル): 作成後に中身を変更できます。
  • 重複可: 同じ値を複数入れても構いません。
  • 順序保持: 追加した順序を保ちます。

以下の表は特徴の要点です。

特徴意味
可変値の追加・更新・削除ができる後から要素を増やす
重複可同じ値を複数持てる[1, 1, 2] のように1が重複
順序保持入れた順のまま取り出せる一覧や手順の管理

サンプルコード

Python
# 重複を含むリストと、変更(可変)の例
numbers = [1, 1, 2]
print(numbers)          # 重複を許す

numbers[0] = 99         # 0番目の要素を更新(可変)
numbers.append(3)       # 要素を末尾に追加(可変)
print(numbers)
実行結果
[1, 1, 2]
[99, 1, 2, 3]

初心者が押さえる基本

インデックスと長さ、存在確認

リストの大きさは len(リスト) で調べられ、特定の値が含まれるかは in で判定できます。

負のインデックスは最後の要素から数えると覚えると便利です。

Python
colors = ["red", "green", "blue"]

print(len(colors))         # 要素数
print("green" in colors)   # 含まれるかどうか
print(colors[-1])          # 最後の要素
実行結果
3
True
blue

リストの作り方

空リストを作る [] と list

使い分けの考え方

空のリストはリテラルの [] か、コンストラクタの list() で作ります。

機能的な違いはほぼないため、短く読みやすい [] がよく使われます。

Python
# 2つの等価な空リストの作成方法
empty1 = []
empty2 = list()

print(empty1, type(empty1), len(empty1))
print(empty2, type(empty2), len(empty2))
実行結果
[] <class 'list'> 0
[] <class 'list'> 0

値を並べて作る リテラル

角かっこで並べる基本形

最も直感的な方法はリテラル(角かっこ)で値をカンマ区切りに並べる形です。

数値や文字列をそのまま混在させることもできますが、初心者のうちは型をそろえると混乱が少ないです。

Python
numbers = [10, 20, 30]               # 数値のリスト
words = ["apple", "banana", "cherry"]# 文字列のリスト
mixed = [42, 3.14, "python", True]   # 混在型(必要な場合のみ)

print(numbers)
print(words)
print(mixed)
実行結果
[10, 20, 30]
['apple', 'banana', 'cherry']
[42, 3.14, 'python', True]

rangeや文字列から作る

反復可能なオブジェクトを list に変換

range連続した整数の並びを作る便利な仕組みです。

文字列を list() に渡すと文字ごとのリストになり、単語ごとに分けたい場合は split() を使います。

Python
# range から作る
r1 = list(range(5))          # 0,1,2,3,4
r2 = list(range(1, 10, 2))   # 1から9まで2刻み

# 文字列から作る
chars = list("Hello")                          # 1文字ずつ
words = "apple orange banana".split()         # 空白で区切って単語のリストに

print(r1)
print(r2)
print(chars)
print(words)
実行結果
[0, 1, 2, 3, 4]
[1, 3, 5, 7, 9]
['H', 'e', 'l', 'l', 'o']
['apple', 'orange', 'banana']

内包表記で作る

作りながら加工・抽出できる表現

内包表記は「作る」と「変換/絞り込み」を一度に書ける強力な記法です。

読みやすさを保つ範囲で使うと、短く明快なコードになります。

Python
# 基本形: 値を変換しながら作る
squares = [n * n for n in range(1, 6)]  # 1〜5の二乗

# 条件付き: 偶数だけ二乗
even_squares = [n * n for n in range(1, 11) if n % 2 == 0]

print(squares)
print(even_squares)
実行結果
[1, 4, 9, 16, 25]
[4, 16, 36, 64, 100]

ネストしたリストを作る

2次元の表(グリッド)をリストで表現

「行のリスト」の各行が「列のリスト」という構造で、2次元の表を表現できます。

初期化には内包表記が安全です。

Python
# 3行×4列を0で埋めたグリッド
rows, cols = 3, 4
grid = [[0 for _ in range(cols)] for _ in range(rows)]

# 2行目(インデックス1)の3列目(インデックス2)に値を立てる
grid[1][2] = 1

for row in grid:
    print(row)
実行結果
[0, 0, 0, 0]
[0, 0, 1, 0]
[0, 0, 0, 0]

よくある注意点(参照の共有)

[[0] * 4] * 3 のように乗算で行を複製すると、同じ1つの行を3回参照する状態になり、1箇所を書き換えると全行に反映されてしまいます。

Python
# 良くない初期化例: 3行が同じオブジェクトを参照
bad = [[0] * 4] * 3
bad[1][2] = 9

for row in bad:
    print(row)  # 3行すべてに9が現れてしまう
実行結果
[0, 0, 9, 0]
[0, 0, 9, 0]
[0, 0, 9, 0]

上記の悪いサンプルを内包表記で書き直すとこのようになります。

Python
# 良い初期化例: 各行は独立したオブジェクト
good = [[0] * 4 for _ in range(3)]
good[1][2] = 9

for row in good:
    print(row)  # 変更は1行だけに反映される

こうすると各行が独立したリストになるので、1行を変更しても他の行には影響しません。

リストの使いどころ

順序が大事なデータに最適

手順や履歴、並び順に意味がある情報

リストは「順番が意味を持つ」データに向いています。

レシピの手順、処理のステップ、訪問履歴、曲順などは代表例です。

Python
# 手順を順番どおりに表示
steps = ["準備", "調理", "盛り付け"]

for i, step in enumerate(steps, start=1):  # 1から番号付け
    print(f"Step {i}: {step}")
実行結果
Step 1: 準備
Step 2: 調理
Step 3: 盛り付け

重複を許す収集に便利

同じ出来事が複数回起こり得る場面

ユーザーのクリック履歴やアクセスしたページ、同じタグを複数回付与するような場面では、重複をそのまま残すことに意味があります。

リストなら自然に扱えます。

Python
visited = []                 # 空の履歴
visited.append("home")
visited.append("search")
visited.append("home")       # home に再訪問(重複)

print(visited)
print(len(visited))          # 3件(重複を含めた件数)
実行結果
['home', 'search', 'home']
3

後から要素を増やす可能性があるとき

ログや計測値の蓄積

リストは可変なので、実行中にどんどん追加できます。

時間とともに増えるログや測定値の蓄積に向いています。

Python
# 時系列に読み取った温度を蓄積
temperatures = []
for reading in [23.4, 24.1, 25.0]:
    temperatures.append(reading)

temperatures[1] = 24.0  # 記録の訂正も可能(可変)

print(temperatures)
実行結果
[23.4, 24.0, 25.0]

forで順番に処理したいとき

先頭から末尾へ、順番に取り出す

リストは順序を保つため、for先頭から末尾まで順番に処理するのが自然です。

表示や集計、検査など、多くの基本処理がこの形に当てはまります。

Python
queue = ["Aさん", "Bさん", "Cさん"]

for user in queue:
    print(f"次の人: {user}")
実行結果
次の人: Aさん
次の人: Bさん
次の人: Cさん

リストを選ぶ判断基準

どの入れ物を使うかの目安

「順序が意味を持ち、重複を許し、後から増減があり得る」なら、まずリストを選ぶのが定石です。

他の入れ物(辞書・タプル・セット)の詳細は別記事で扱いますが、ざっくり比較を示します。

順序保持重複可変主な用途
listするする順序付きの収集
tupleするしない変更しない並び
setしない不可する重複排除・集合演算
dictする(3.7+)キーは一意するキーと値の対応

注: set は数学的集合のため順序の概念がありません。

dict はPython 3.7以降、挿入順を保持します。

現時点(2025年9月)でのPythonの最新バージョンは3.13であるため、最新バージョンを使っているなら問題ありませんが、3.6以下では使用が異なる(順序が保証されない)ので注意してください。

まとめ

リスト(list)は、順序を保ったまま複数の値をまとめられる、Pythonの最重要データ構造の1つです。

本記事では、空リストやリテラル、range や文字列からの変換、内包表記、ネストといった代表的な作り方を示し、どんな場面に向いているかを具体例で確認しました。

順序が意味を持ち、重複を許し、後から増える可能性があるデータには、まずリストを選ぶと良いでしょう。

辞書・タプル・セットとの細かな使い分けは別の記事で深掘りしつつ、まずはリストを自在に作り扱う感覚を身につけてください。

この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!