如何在Python中将多个值添加到列表中

418

我正在尝试找出如何在Python中将多个值添加到列表的方法。 我知道有几种方法可以实现,例如手动输入值,或将追加操作放入for 循环中,或使用appendextend函数。

不过,我想知道是否有更简洁的方法?也许有某个包或函数可以做到?


13
你找到了列表文档吗? - Martijn Pieters
6个回答

759
你可以使用序列方法list.extend将列表扩展为来自任何可迭代对象的多个值,无论是另一个列表还是提供值序列的其他任何对象。
>>> lst = [1, 2]
>>> lst.append(3)
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]

>>> lst.extend([5, 6, 7])
>>> lst.extend((8, 9, 10))
>>> lst
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> lst.extend(range(11, 14))
>>> lst
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

所以你可以使用list.append()来添加单个值,使用list.extend()来添加多个值。

2
在使用Python的第一天向某人介绍生成器可能有点复杂。 - Daniel Roseman
2
@DanielRoseman 我的意思是这些值可以来自于任何类型的可迭代序列。 - poke
13
请注意,与append()相比,extend()不会保留您添加的元素的结构。以使用append()的示例为例,您将得到[1, 2, 3, 4, [5, 6, 7], (8, 9, 10), range(11, 14)]Python 3 - Yohan Obadia
7
如果在2017年对于Python 3是这种情况,那现在已经不是了——Python 3.7.7正好做到了poke所描述的。 - Post169
2
@YohanObadia那没有意义。Append附加一个元素,因此它“保持结构”。但这很明显。 而且@Post169,在'17和今天之间没有任何变化,extend和append仍然表现出相同的方式,Yohan只是不理解什么是什么。 - Jürgen A. Erhard
1
@JürgenA.Erhard 我甚至会更进一步说,在2013年和今天之间什么都没有改变:D - poke

56

除了append函数外,如果你所说的"多个值"是指另一个列表,你可以像这样简单地将它们连接起来。

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a + b
[1, 2, 3, 4, 5, 6]

8
我知道这篇文章很旧,在写作时,有45个人同意你的回答很好,但严格来说,原帖要求在列表中添加项目,而这里是创建一个新列表。虽然非常相似/相关的陈述是:a += b。这将追加并与上面主要答案不同。 - Blaine
给定 a = [1, 2, 3],你也可以使用 a += [4, 5, 6] 来添加多个元素。这将把 a 设置为 [1, 2, 3, 4, 5, 6]。这不会创建一个新的列表;每个元素都被附加到 a 上。(通过 a = [1, 2, 3]; b = a; a += [4, 5, 6] 进行测试,你会发现 ab 仍然是相同的。) - FWDekker

15
如果你查看官方文档,就会发现在append下面,有一个extend。那就是你要找的。
还有一个itertools.chain,如果你更关心高效迭代而不是最终得到一个完全填充的数据结构。

3
另一个解决方案是在新列表中解压缩两个列表并将其分配回原始列表的副本:
my_list[:] = [*my_list, *new_items]

一个例子:

my_list = [1, 2]
new_items = [3, 4, 5]

my_list[:] = [*my_list, *new_items]
my_list                                # [1, 2, 3, 4, 5]

或者像Saumya Prasad的回答中所示,将其分配给一个空切片(但在列表末尾):

length = len(my_list)
my_list[length:length] = new_items
my_list                                # [1, 2, 3, 4, 5]

值得注意的是,list.extend和对空切片进行切片赋值都会就地修改列表,而itertools.chain或解包或+运算符则会创建一个新列表。

1

您可以通过以下方式解决这种类型的问题 -

在此,我们通过创建变量new_values将列表插入到现有列表中。

请注意,我们将值插入到第二个索引中,即a[2]

a = [1, 2, 7, 8]

new_values = [3, 4, 5, 6]

a.insert(2, new_values)

print(a)

但是,使用insert()方法会将值附加为列表。

因此,这里有另一种做相同事情的方法,但这次我们实际上将值插入到项目之间。

a = [1, 2, 7, 8]

a[2:2] = [3,4,5,6]

print(a)

1
如果项目数量保存在一个变量中,比如说n,你可以使用列表推导和加号来进行列表扩展。
lst = ['A', 'B']
n = 1
new_lst = lst + ['flag'+str(x) for x in range(n)]
print(my_lst)

>>> ['A','B','flag0','flag1']

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