我想创建一系列不同长度的列表。每个列表将包含相同的元素e
,重复的n
次数(其中n
=列表的长度)。
如何在不使用每个列表的列表理解[e for number in xrange(n)]
的情况下创建列表?
发布于 2010-08-11 22:05:42
>>> [5] * 4
[5, 5, 5, 5]
当重复的项目是一个列表时,要小心。该列表将不会被克隆:所有元素都将引用同一列表!
>>> x=[5]
>>> y=[x] * 4
>>> y
[[5], [5], [5], [5]]
>>> y[0][0] = 6
>>> y
[[6], [6], [6], [6]]
发布于 2010-08-11 22:02:50
Itertools有一个专门用于此的函数:
import itertools
it = itertools.repeat(e,n)
当然,itertools
给了你一个迭代器而不是一个列表。[e] * n
为您提供了一个列表,但是,根据您将如何处理这些序列,itertools
变体可能会更有效。
发布于 2015-01-28 01:53:33
正如其他人所指出的那样,对可变对象使用*运算符会复制引用,因此如果更改一个引用,则会将它们全部更改。如果想要创建可变对象的独立实例,xrange语法是最具Pythonic风格的方法。如果您对从未使用过的命名变量感到困扰,您可以使用匿名下划线变量。
[e for _ in xrange(n)]
https://stackoverflow.com/questions/3459098
复制相似问题