Pythonはリスト操作のための豊富なツールを提供しており、その中で頻繁に使用されるメソッドにappend()
とextend()
があります。どちらもリストに要素を追加しますが、その動作は大きく異なり、結果として得られるリストの構造に影響を与えます。この違いを理解することは、効率的で予測可能なPythonコードを書くための鍵となります。
目次:
要素の追加: append()
メソッド
append()
メソッドは、リストの最後に単一の要素を追加します。要素の型は問いません。整数、文字列、別のリスト、またはその他のPythonオブジェクトでも構いません。重要な特性は、要素を分割できない単一の単位として追加することです。
my_list = [1, 2, 3]
my_list.append(4) # 4を末尾に追加
print(my_list) # 出力: [1, 2, 3, 4]
my_list.append([5, 6]) # [5, 6]を単一要素として追加
print(my_list) # 出力: [1, 2, 3, 4, [5, 6]]
2番目の例では、リスト[5, 6]
がmy_list
内の単一の要素になることに注意してください。アンパックされません。
リストの拡張: extend()
メソッド
対照的に、extend()
は反復可能オブジェクト(リスト、タプル、文字列など)を引数として受け取り、その反復可能オブジェクトの各*個々のアイテム*をリストの末尾に追加します。これは、反復可能オブジェクトの内容を効果的にアンパックします。
my_list = [1, 2, 3]
my_list.extend([4, 5]) # 4と5を個別に追加
print(my_list) # 出力: [1, 2, 3, 4, 5]
my_list.extend("abc") # 'a', 'b', 'c'を個別に追加
print(my_list) # 出力: [1, 2, 3, 4, 5, 'a', 'b', 'c']
ここでは、extend()
は[4, 5]
の各要素と"abc"
の各文字を個々の要素としてmy_list
に追加します。
詳細な比較: append()
vs. extend()
以下の表は、主な違いをまとめたものです。
特徴 | append() |
extend() |
---|---|---|
引数の型 | 単一要素 | 反復可能オブジェクト(リスト、タプル、文字列など) |
動作 | 単一要素を追加する | 反復可能オブジェクトからの複数の要素を追加する |
リストの変更 | リストの長さが1増加する | リストの長さが反復可能オブジェクト内のアイテム数だけ増加する |
効率性 | 単一アイテムを追加する場合、一般的に高速 | 反復可能オブジェクトからの複数のアイテムを追加する場合、より効率的 |
実践的な応用とベストプラクティス
append()
とextend()
のどちらを選択するかは、完全に目的によって異なります。リストに単一のアイテムを追加する必要がある場合はappend()
を使用します。2つのリストをマージするなど、別の反復可能オブジェクトから複数のアイテムを追加する場合はextend()
を使用します。誤った使用は予期しないリスト構造につながる可能性があるため、それらの違いを理解することは、堅牢なPythonコードを書くために不可欠です。
よくある質問
- Q:
append()
を反復可能オブジェクトで使用できますか? A: はい、ただし反復可能オブジェクト全体が単一要素として追加されます。 - Q:
extend()
を単一要素で使用できますか? A: はい、しかしPythonは単一要素を1要素の反復可能オブジェクトとして扱うため、append()
よりも効率が悪くなります。 - Q: どちらのメソッドが高速ですか? A: 特に単一要素を追加する場合、反復処理のオーバーヘッドを回避するため、
append()
の方が一般的に高速です。非常に大きなリストを扱う場合を除き、その差は通常無視できます。