Python:将项目追加到列表N次
看起来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
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]