2

リスト操作を参照します。

L = myList + otherList
L = myList.append([5])
L = myList.extend(otherList)

これらの操作の間に効率の違いがあるかどうか私は興味があります。

4

3 に答える 3

5

これらはまったく異なる操作です。

それらは異なる目的を持っているので、効率は重要ではありません。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.appendlist.extend動作するため、結果を変数に割り当てると、その変数が値を保持することに注意してください。None

于 2013-03-23T01:46:54.497 に答える
2

ここでの例は、の場合の誤解を招くようなものですappend

>>> l1 = [1,2,3,4]
>>> l1.append([5])
>>> l1
[1, 2, 3, 4, [5]]

Appendは単一のアイテムを受け取り、それを既存のリストの最後に追加します。追加する反復可能オブジェクトを渡すことにより、リスト内に別のリスト(この場合)を追加します。

extendappenditerableを取得し、基本的にiterable`の各アイテムを呼び出し、既存のリストの最後にアイテムを追加します。

演算子を使用した結果、より多くのメモリを使用して新しいリストが作成されるため、これmylist + otherlistが唯一の興味深いケースです。+

于 2013-03-23T01:46:41.643 に答える
1

それらのタイミングは、速度に関する効率についてのあなたの質問に答えます:

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

最初の例が明らかに最も遅いことを示しています。

于 2013-03-23T01:51:07.700 に答える