列表方法append()和extend()之间有什么区别?
当前回答
附加与扩展
使用append,您可以附加一个扩展列表的元素:
>>> a = [1,2]
>>> a.append(3)
>>> a
[1,2,3]
如果要扩展多个元素,应使用extend,因为只能附加一个元素或一个元素列表:
>>> a.append([4,5])
>>> a
>>> [1,2,3,[4,5]]
这样就可以得到一个嵌套列表
相反,使用extend,可以像这样扩展单个元素
>>> a = [1,2]
>>> a.extend([3])
>>> a
[1,2,3]
或者,与append不同,一次扩展更多元素,而不将列表嵌套到原始列表中(这就是名称extend的原因)
>>> a.extend([4,5,6])
>>> a
[1,2,3,4,5,6]
使用两种方法添加一个元素
append和extend都可以在列表末尾添加一个元素,尽管append更简单。
追加1个元素
>>> x = [1,2]
>>> x.append(3)
>>> x
[1,2,3]
扩展一个元素
>>> x = [1,2]
>>> x.extend([3])
>>> x
[1,2,3]
正在添加更多元素。。。结果不同
如果您对多个元素使用append,则必须传递一个元素列表作为参数,您将获得一个NESTED列表!
>>> x = [1,2]
>>> x.append([3,4])
>>> x
[1,2,[3,4]]
相反,使用extend,您将传递一个列表作为参数,但您将获得一个包含未嵌套在旧元素中的新元素的列表。
>>> z = [1,2]
>>> z.extend([3,4])
>>> z
[1,2,3,4]
因此,如果有更多的元素,您将使用extend获得包含更多项目的列表。但是,附加一个列表不会向列表中添加更多元素,而是添加一个嵌套列表元素,您可以在代码输出中清楚地看到。
其他回答
我希望我能对这个问题做一个有益的补充。如果您的列表存储了一个特定类型的对象,例如Info,这里有一种情况是extend方法不适合的:在for循环中,每次生成一个Info对象并使用extend将其存储到列表中,它将失败。例外情况如下:
TypeError:“Info”对象不可迭代
但如果使用append方法,结果是可以的。因为每次使用extend方法时,它都会将其视为列表或任何其他集合类型,对其进行迭代,并将其放在上一个列表之后。显然,特定的对象无法迭代。
您可以使用“+”返回扩展,而不是就地扩展。
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的最大区别之一是在函数作用域中使用时,请参阅本文。
append附加一个元素。extend附加元素列表。
请注意,如果您传递一个列表进行追加,它仍然会添加一个元素:
>>> a = [1, 2, 3]
>>> a.append([4, 5, 6])
>>> a
[1, 2, 3, [4, 5, 6]]
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]
append():它基本上在Python中用于添加一个元素。
示例1:
>> a = [1, 2, 3, 4]
>> a.append(5)
>> print(a)
>> a = [1, 2, 3, 4, 5]
示例2:
>> a = [1, 2, 3, 4]
>> a.append([5, 6])
>> print(a)
>> a = [1, 2, 3, 4, [5, 6]]
extend():其中extend(()用于合并两个列表或在一个列表中插入多个元素。
示例1:
>> a = [1, 2, 3, 4]
>> b = [5, 6, 7, 8]
>> a.extend(b)
>> print(a)
>> a = [1, 2, 3, 4, 5, 6, 7, 8]
示例2:
>> a = [1, 2, 3, 4]
>> a.extend([5, 6])
>> print(a)
>> a = [1, 2, 3, 4, 5, 6]
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录