列表方法append()和extend()之间有什么区别?
当前回答
凭直觉区分它们
l1 = ['a', 'b', 'c']
l2 = ['d', 'e', 'f']
l1.append(l2)
l1
['a', 'b', 'c', ['d', 'e', 'f']]
这就像l1在体内复制了一个身体(嵌套)。
# Reset l1 = ['a', 'b', 'c']
l1.extend(l2)
l1
['a', 'b', 'c', 'd', 'e', 'f']
这就像两个分开的人结婚,组成一个团结的家庭。
此外,我还列出了一份详尽的清单,供您参考。
list_methods = {'Add': {'extend', 'append', 'insert'},
'Remove': {'pop', 'remove', 'clear'}
'Sort': {'reverse', 'sort'},
'Search': {'count', 'index'},
'Copy': {'copy'},
}
其他回答
Append一次添加整个数据。整个数据将添加到新创建的索引中。另一方面,extend,顾名思义,扩展当前数组。
例如
list1 = [123, 456, 678]
list2 = [111, 222]
使用append,我们得到:
result = [123, 456, 678, [111, 222]]
在扩展期间,我们得到:
result = [123, 456, 678, 111, 222]
extend(L)通过附加给定列表L中的所有项目来扩展列表。
>>> a
[1, 2, 3]
a.extend([4]) #is eqivalent of a[len(a):] = [4]
>>> a
[1, 2, 3, 4]
a = [1, 2, 3]
>>> a
[1, 2, 3]
>>> a[len(a):] = [4]
>>> a
[1, 2, 3, 4]
这相当于使用+运算符进行追加和扩展:
>>> x = [1,2,3]
>>> x
[1, 2, 3]
>>> x = x + [4,5,6] # Extend
>>> x
[1, 2, 3, 4, 5, 6]
>>> x = x + [[7,8]] # Append
>>> x
[1, 2, 3, 4, 5, 6, [7, 8]]
您可以使用“+”返回扩展,而不是就地扩展。
l1=range(10)
l1+[11]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11]
l2=range(10,1,-1)
l1+l2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2]
类似地,+=表示就地行为,但与append&extend略有不同。+=与append和extend的最大区别之一是在函数作用域中使用时,请参阅本文。
extend()可以与迭代器参数一起使用。这里有一个例子。您希望通过以下方式从列表列表中列出一个列表:
From
list2d = [[1,2,3],[4,5,6], [7], [8,9]]
你想要的
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
您可以使用itertools.chain.from_iterable()来执行此操作。此方法的输出是迭代器。它的实现相当于
def from_iterable(iterables):
# chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
for it in iterables:
for element in it:
yield element
回到我们的例子,我们可以
import itertools
list2d = [[1,2,3],[4,5,6], [7], [8,9]]
merged = list(itertools.chain.from_iterable(list2d))
拿到通缉名单。
以下是如何将extend()等效地用于迭代器参数:
merged = []
merged.extend(itertools.chain.from_iterable(list2d))
print(merged)
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]