Python:将项目追加到列表N次

134 投票
7 回答
220366 浏览
提问于 2025-04-16 09:45

看起来Python应该有个快捷的方法来处理这个问题。我想要把一个项目添加到列表中N次,实际上就是这样做:

l = []
x = 0
for i in range(100):
    l.append(x)

我觉得应该有一种“优化过”的方法,比如:

l.append_multiple(x, 100)

有没有这样的办法呢?


如果你想从另一个序列中添加元素(而不是重复添加同一个值),你可以直接用.extend方法来添加那个序列。可以参考一下这个链接:如何在空列表的末尾添加元素?

7 个回答

13

这是在讲一个叫做“itertools”的工具,它可以帮助我们重复一些东西。这里提到的“repeat”就是让我们可以把某个元素重复多次。而“list extend”则是把这些重复的元素添加到一个列表里。简单来说,就是把一个东西复制很多遍,然后把这些复制的东西放到一个新的列表中。

from itertools import repeat
l = []
l.extend(repeat(x, 100))
41

使用extend可以把一个列表推导式的结果添加到另一个列表的末尾。

l.extend([x for i in range(100)])

想了解更多信息,可以查看Python文档

188

对于不可变的数据类型:

l = [0] * 100
# [0, 0, 0, 0, 0, ...]

l = ['foo'] * 100
# ['foo', 'foo', 'foo', 'foo', ...]

对于那些通过引用存储的值,并且你可能想要稍后修改的情况(比如子列表或字典):

l = [{} for x in range(100)]

之所以说第一种方法只适合常量值,比如整数或字符串,是因为使用 <list>*<number> 这种语法时只会进行浅拷贝。如果你做了像 [{}]*100 这样的操作,你就会得到100个指向同一个字典的引用——所以如果你修改其中一个,其他的也会跟着变。由于整数和字符串是不可变的,这对它们来说就没问题了。

如果你想往一个已有的列表中添加内容,可以使用这个列表的 extend() 方法(结合上面提到的生成要添加的内容的列表技巧):

a = [1,2,3]
b = [4,5,6]
a.extend(b)
# a is now [1,2,3,4,5,6]

撰写回答