我指的是列表操作:
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
and就地list.extend
操作,因此将结果分配给变量将使该变量保持 value 。None
您的示例在append
.
>>> l1 = [1,2,3,4]
>>> l1.append([5])
>>> l1
[1, 2, 3, 4, [5]]
Append 接受单个项目并将其附加到现有列表的末尾。通过传入一个可迭代的追加,您将在列表中添加另一个列表(在本例中)。
extend
接受一个可迭代对象,本质上调用可迭代append
对象中的每个项目,将这些项目添加到现有列表的末尾。
这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
表明第一个示例显然是最慢的。