我指的是列表操作:
L = myList + otherList
L = myList.append([5])
L = myList.extend(otherList)
我很好奇这些操作之间是否存在效率差异。
答案 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.append
和list.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
显示第一个例子显然是最慢的。