list.append の概要(末尾に“1つだけ”追加する)
append は、リストの末尾に要素を「1つ」追加するメソッドです。リストを可変に拡張する最も基本的な手段で、戻り値は返しません(None)。その場でリストが変わる“インプレース”操作です。
fruits = ["apple", "banana"]
fruits.append("orange")
print(fruits) # ["apple", "banana", "orange"]
Python基本構文と挙動(ここが重要)
インプレースで変更され、戻り値は None
append の呼び出し結果を変数に代入しないでください。戻り値は Noneで、変更は元のリストに直接反映されます。
nums = [1, 2, 3]
result = nums.append(4)
print(nums) # [1, 2, 3, 4]
print(result) # None(これが“戻り値なし”の証拠)
Pythonどんな型でも「1つの要素」として入る
文字列、数値、別のリスト、辞書、タプルなど、Pythonの任意のオブジェクトを「そのまま1要素」として追加できます。
box = []
box.append(42) # 数値
box.append("hello") # 文字列
box.append([1, 2]) # リスト(入れ子)
box.append({"x": 10}) # 辞書
print(box) # [42, "hello", [1, 2], {"x": 10}]
Pythonappend と extend・insert の違い(重要ポイントを深掘り)
「1要素追加」か「複数を展開」か
append は引数を「そのまま1要素」として追加。複数要素を一度に追加したいなら extend を使います。
items = [1, 2]
items.append([3, 4])
print(items) # [1, 2, [3, 4]] ← リストが“丸ごと1要素”
items = [1, 2]
items.extend([3, 4])
print(items) # [1, 2, 3, 4] ← 要素が“展開して複数追加”
Python途中の位置に入れたいなら insert
insert(index, value) は「指定位置」に挿入します。append は常に末尾です。
letters = ["A", "C"]
letters.insert(1, "B")
print(letters) # ["A", "B", "C"]
Pythonよくある間違いと安全な書き方
append の戻り値を使ってしまう
戻り値は None。チェーンしたり、代入して使おうとすると意図と違う結果になります。操作は「文」として行い、読む側に明確に伝えましょう。
# 悪い例(Noneが入ってしまう)
x = []
x = x.append(1)
print(x) # None
# 良い例
x = []
x.append(1)
print(x) # [1]
Python文字列に append はない
文字列は不変(イミュータブル)です。文字列を伸ばしたいときは + や join を使います。
s = "py"
# s.append("thon") ← ない
s = s + "thon"
print(s) # "python"
Python実務での使いどころ(定番パターン)
フィルタしながら蓄積(クレンジング)
raw = ["120", "abc", " 560 "]
clean = []
for s in raw:
s = s.strip()
if s.isdigit():
clean.append(int(s))
print(clean) # [120, 560]
Python二次元リストの構築(1行ずつ追加)
table = []
table.append(["name", "price"])
table.append(["coffee", 350])
table.append(["tea", 280])
print(table)
# [["name", "price"], ["coffee", 350], ["tea", 280]]
Python入力を受け取り続けるバッファ
lines = []
print("メモを入力('quit'で終了):")
while True:
s = input().strip()
if s.lower() == "quit":
break
if s:
lines.append(s)
print("\n".join(lines))
Pythonパフォーマンスと設計(大きなデータでも破綻しないために)
末尾追加は高速だが、1件ずつのループはコストになる
append 自体は高速です。ただし巨大データを1要素ずつ処理する場合は、合計のコストが支配的になります。可能なら「まとめて作って最後に代入」や「内包表記」で一括生成を検討します。
# 一括生成のほうが読みやすく速いことが多い
nums = [n*n for n in range(10_000)]
Python連続追加のメモリ拡張は自動で最適化される
Pythonのリストは内部的に容量を拡張しながら append を高速化します。通常は気にしなくてOK。極端なケースでは、必要量が見えているなら「生成時に作る」(内包表記や * 演算)ほうが効率的です。
zeros = [0] * 10000 # 事前に大きさが分かるならこれも手
Python例題で身につける(誤りやすい点を含む実装)
例題1:extend と間違えずに複数追加
items = []
items.extend(["a", "b", "c"]) # append(["a","b","c"])ではない
print(items) # ["a", "b", "c"]
Python例題2:ネストした構造へ1要素として追加
rows = []
row = ["coffee", 350, 2]
rows.append(row)
rows.append(["tea", 280, 1])
print(rows)
# [["coffee", 350, 2], ["tea", 280, 1]]
Python例題3:フィルタ+変換+蓄積の王道
texts = ["10", "NaN", "20", ""]
nums = []
for t in texts:
t = t.strip()
if t.isdigit():
nums.append(int(t))
print(sum(nums)) # 30
Pythonまとめ
append は「リスト末尾に1要素をインプレースで追加」する基本メソッドです。戻り値は None、どんな型でも1つとして入る、複数を追加したいなら extend、途中に挿入したいなら insert。戻り値の誤用や文字列への適用ミスを避け、フィルタ・変換・蓄積の定番パターンで活用しましょう。大量データは内包表記などの一括生成も視野に入れ、読みやすさと性能のバランスを取るのがコツです。
