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.appendand就地list.extend操作,因此将结果分配给变量将使该变量保持 value 。None

于 2013-03-23T01:46:54.497 回答
2

您的示例在append.

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

Append 接受单个项目并将其附加到现有列表的末尾。通过传入一个可迭代的追加,您将在列表中添加另一个列表(在本例中)。

extend接受一个可迭代对象,本质上调用可迭代append对象中的每个项目,将这些项目添加到现有列表的末尾。

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 回答