为什么要扩展Python列表?

7

当你可以使用 += 运算符时,为什么要使用 extend?哪种方法最好? 此外,将多个列表合并成一个列表的最佳方法是什么?

#my prefered way
_list=[1,2,3]
_list+=[4,5,6]
print _list
#[1, 2, 3, 4, 5, 6]

#why use extend:
_list=[1,2,3]
_list.extend([4,5,6])
print _list
#[1, 2, 3, 4, 5, 6]



_lists=[range(3*i,3*i+3) for i in range(3)]
#[[0, 1, 2], [3, 4, 5], [6, 7, 8]]

#my prefered way of merging lists
print sum(_lists,[])
#[0, 1, 2, 3, 4, 5, 6, 7, 8]


#is there a better way?
from itertools import chain
print list(chain(*_lists))
#[0, 1, 2, 3, 4, 5, 6, 7, 8]
2个回答

16
+= 只能用于将一个列表扩展到另一个列表,而extend可以用于将一个列表扩展到可迭代对象

例如:

你可以这样做:

a = [1,2,3]
a.extend(set([4,5,6]))

但是你无法做到

a = [1,2,3]
a += set([4,5,6])

关于第二个问题

[item for sublist in l for item in sublist] is faster.

请查看在Python中将嵌套列表变成一维列表


谢谢!这基本上就是它了。_list+=list(_iterable)等效吗? - Rusty Rob
1
两种方法可以实现相同的结果,但底层实现会有所不同。 - qiao

1
你可以使用非列表对象作为迭代器来扩展Python列表。迭代器不存储任何值,而是一个对象,用于对某些值进行一次迭代。有关迭代器的更多信息在这里
在此线程中,有示例演示如何将迭代器用作extend()方法的参数:append vs. extend

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接