Python中的扩展与添加和附加是否存在效率差异?

时间:2013-03-23 01:38:33

标签: python algorithm

我指的是列表操作:

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

我很好奇这些操作之间是否存在效率差异。

3 个答案:

答案 0 :(得分: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。< / p>

答案 1 :(得分:1)

这里的例子在append的情况下有点误导。

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

追加采用单个项目并将其附加到现有列表的末尾。通过传递一个可迭代的追加,你在列表中添加另一个列表(在这种情况下)。

extend采用可迭代的方式,实质上为iterable中的每个项调用append,将项添加到现有列表的末尾。

mylist + otherlist是唯一有趣的案例,因为使用+运算符会使用更多内存创建新列表。

答案 2 :(得分: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

显示第一个例子显然是最慢的。