リスト操作を参照します。
L = myList + otherList
L = myList.append([5])
L = myList.extend(otherList)
これらの操作の間に効率の違いがあるかどうか私は興味があります。
これらはまったく異なる操作です。
それらは異なる目的を持っているので、効率は重要ではありません。append
は、単一の値をリストに追加するためにextend
使用され、複数の値に使用されます。追加は、元のリストを変更したくないが、追加の値が追加された別のリストを作成する場合に使用されます。
>>> lst = [1, 2, 3]
>>> lst2 = [5, 6]
>>> lst.append(4) # appending
>>> lst
[1, 2, 3, 4]
>>> lst.extend(lst2) # extending
>>> lst
[1, 2, 3, 4, 5, 6]
>>> lst + lst2 # addition
[1, 2, 3, 4, 5, 6, 5, 6]
また、インプレースlist.append
でlist.extend
動作するため、結果を変数に割り当てると、その変数が値を保持することに注意してください。None
ここでの例は、の場合の誤解を招くようなものですappend
。
>>> l1 = [1,2,3,4]
>>> l1.append([5])
>>> l1
[1, 2, 3, 4, [5]]
Appendは単一のアイテムを受け取り、それを既存のリストの最後に追加します。追加する反復可能オブジェクトを渡すことにより、リスト内に別のリスト(この場合)を追加します。
extend
append
iterableを取得し、基本的にiterable`の各アイテムを呼び出し、既存のリストの最後にアイテムを追加します。
演算子を使用した結果、より多くのメモリを使用して新しいリストが作成されるため、これmylist + otherlist
が唯一の興味深いケースです。+
それらのタイミングは、速度に関する効率についてのあなたの質問に答えます:
import timeit
def first():
mylist + otherlist
def second():
mylist.append(otherlist)
def third():
mylist.extend(otherlist)
for test in (first, second, third):
mylist = [1, 2, 3, 4]
otherlist = [5]
print "%s: %f" % (test, timeit.timeit(test, number=1000000))
私のマシンでは、結果は次のとおりです。
<function first at 0x10ff3ba28>: 0.320835
<function second at 0x10ff3baa0>: 0.275077
<function third at 0x10ff3bb18>: 0.284508
最初の例が明らかに最も遅いことを示しています。