リストの概要(順序がある、後から変えられる「箱」)
Pythonのリストは、複数の値を順序付きで並べて保持できる基本データ構造です。角括弧 [] で作り、整数・文字列・他のリストなど、異なる型を混ぜて入れられます。リストは可変(ミュータブル)なので、後から追加・削除・変更ができます。
empty = []
nums = [1, 2, 3]
mix = ["apple", 123, 3.14, True]
print(type(nums)) # <class 'list'>
Python要素アクセスとスライス(ここが重要)
インデックスで個別取得・更新
インデックスは 0 始まりです。負のインデックスは末尾から数えます。
fruits = ["apple", "banana", "orange"]
print(fruits[0]) # "apple"
print(fruits[-1]) # "orange"
fruits[1] = "grape"
print(fruits) # ["apple", "grape", "orange"]
Pythonスライスで「範囲」や「間引き」
[start:end:step] で部分列を取り出します。end は「含まない」半開区間です。
a = [0, 1, 2, 3, 4, 5]
print(a[1:4]) # [1, 2, 3]
print(a[:3]) # [0, 1, 2]
print(a[::2]) # [0, 2, 4]
print(a[::-1]) # 逆順: [5, 4, 3, 2, 1, 0]
Pythonスライス代入で一括更新・挿入・削除
スライス左辺に代入すると、まとめて置換できます。
nums = [1, 2, 3, 4, 5]
nums[1:4] = [20, 30] # 要素数が変わってもOK
print(nums) # [1, 20, 30, 5]
nums[2:2] = [99, 100] # 挿入(空範囲に代入)
print(nums) # [1, 20, 99, 100, 30, 5]
nums[1:4] = [] # 削除
print(nums) # [1, 5]
Pythonよく使う操作とメソッド(追加・削除・並べ替え)
追加と結合
items = ["a"]
items.append("b") # 末尾に追加
items.extend(["c", "d"]) # 反復可能オブジェクトを展開して末尾に追加
items.insert(1, "x") # 位置を指定して挿入
print(items) # ["a", "x", "b", "c", "d"]
Python削除と取り出し
items = ["a", "b", "c", "b"]
items.remove("b") # 最初の "b" を削除(存在しないと ValueError)
print(items) # ["a", "c", "b"]
last = items.pop() # 末尾を取り出しつつ削除
print(last, items) # "b" ["a", "c"]
second = items.pop(1) # 指定位置を取り出し削除
print(second, items) # "c" ["a"]
items.clear() # 全削除
print(items) # []
Python並べ替えと逆順
nums = [5, 2, 9, 1]
nums.sort() # 就地ソート(破壊的)
print(nums) # [1, 2, 5, 9]
nums.sort(reverse=True) # 降順
print(nums) # [9, 5, 2, 1]
words = ["Zoo", "apple", "Banana"]
print(sorted(words, key=str.lower)) # 新しいリストを返す(非破壊)
print(list(reversed(words))) # 逆順イテレータを展開
Pythonイテレーションと作り替え(内包表記・組み合わせ)
ループで処理する
scores = [70, 85, 90]
for s in scores:
print("score:", s)
Pythonenumerate と zip の併用
fruits = ["apple", "banana", "orange"]
for i, f in enumerate(fruits, start=1):
print(i, f)
names = ["太郎", "花子"]
points = [92, 88]
for name, point in zip(names, points):
print(name, point)
Pythonリスト内包表記(宣言的に作る)
nums = [1, 2, 3, 4, 5]
sq = [n*n for n in nums] # 変換
evens= [n for n in nums if n % 2 == 0]# 条件フィルタ
print(sq, evens)
Python重要ポイントの深掘り(ミュータブル・コピー・性能)
ミュータブルの性質と“別名参照”に注意
リストは可変です。代入は「別名を作る」だけで、中身を共有します。
a = [1, 2, 3]
b = a # 同じオブジェクトを参照
b[0] = 99
print(a) # [99, 2, 3](a も変わる)
Python「独立したコピー」が欲しいときは浅いコピーを作ります。
a = [1, 2, 3]
b = a[:] # スライスで浅いコピー
# b = a.copy() # 同等
b[0] = 99
print(a, b) # [1, 2, 3] [99, 2, 3]
Python入れ子(ネスト)構造では浅いコピーだと内側が共有されます。完全に独立させたいときは deepcopy を使います。
import copy
nested = [[1], [2]]
shallow = nested[:] # 内側リストは共有
deep = copy.deepcopy(nested) # 完全コピー
shallow[0][0] = 99
print(nested) # [[99], [2]]
print(deep) # [[1], [2]]
Python長さ・集計・存在確認の基本関数
nums = [1, 2, 3]
print(len(nums)) # 要素数
print(sum(nums)) # 合計
print(max(nums), min(nums))
print(2 in nums) # メンバーシップ(存在確認)
Python大規模処理は“イテレーションを意識”
- 生成を遅延: 可能ならジェネレータやイテレータで逐次処理(list(…) は必要時のみ)。
- キー関数: sort/sorted の key を使って O(n log n) を最小化。
- 前処理分離: 複雑な if を変数へ分解し、ループ本体を短く保つ。
例題で身につける(定番から一歩先まで)
例題1:買い物合計と税計算
orders = [
{"item": "coffee", "price": 350, "qty": 2},
{"item": "tea", "price": 280, "qty": 1},
]
subtotal = 0
for o in orders:
subtotal += o["price"] * o["qty"]
tax = round(subtotal * 0.1)
total = subtotal + tax
print(f"合計: {total} 円")
Python例題2:重複除去と並べ替え
items = ["apple", "banana", "apple", "orange", "banana"]
uniq_sorted = sorted(set(items)) # set で重複除去 → sorted で並びを安定化
print(uniq_sorted) # ['apple', 'banana', 'orange']
Python例題3:テーブル整形(幅と寄せ)
rows = [
("item", "price", "qty"),
("coffee", 350, 2),
("tea", 280, 1),
]
for item, price, qty in rows:
print(f"{item:<10} {price:>6} {qty:>3}")
Python例題4:二次元リストの転置と合計
matrix = [
[1, 2, 3],
[4, 5, 6],
]
cols = list(zip(*matrix)) # 転置(列のタプル)
col_sums = [sum(c) for c in cols]
print(cols, col_sums) # [(1,4),(2,5),(3,6)] [5,7,9]
Python落とし穴と対策(初心者がつまずきやすい点)
remove と存在しない値
remove(“x”) は見つからないと ValueError。事前確認: “x” in list で存在チェック、または try/except で安全に。
sort と sorted の違い
sort は就地変更、sorted は新しいリストを返す。方針: 元のデータを残したいときは sorted を使う。
変更しながら回す
ループ対象をその場で削除・追加すると、インデックスがずれます。安全策: コピーで回す(list[:])か、新しいリストへ結果を書き出す。
items = [1, 2, 3, 4]
for x in items[:]:
if x % 2 == 0:
items.remove(x)
print(items) # [1, 3]
まとめ
リストは「順序がある・可変・型を混在できる」柔軟な箱で、Pythonの基礎中の基礎です。インデックスとスライス(半開区間)、メソッド(append/extend/insert/remove/pop/clear/sort)、イテレーション(for・内包表記・enumerate・zip)を押さえ、ミュータブルの性質による別名参照とコピーの違いに注意を払うこと。変更しながら回すときの安全策、sort と sorted の使い分け、set との併用で重複除去などを身につければ、日常のデータ処理を短く、正確に書けるようになります。

