Python | データ構造:list.append

Python
スポンサーリンク

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}]
Python

append と 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。戻り値の誤用や文字列への適用ミスを避け、フィルタ・変換・蓄積の定番パターンで活用しましょう。大量データは内包表記などの一括生成も視野に入れ、読みやすさと性能のバランスを取るのがコツです。

タイトルとURLをコピーしました