python - 使用重复元素创建一个列表

时间:2014-02-03 12:11:25

标签: python

我知道是否要创建这样的列表:

[0 1 2 0 1 2 0 1 2 0 1 2]

我可以使用这个命令:

range(3) * 4

是否有类似的方法来创建这样的列表:

[0 0 0 0 1 1 1 1 2 2 2 2]

我的意思是没有循环的方式

6 个答案:

答案 0 :(得分:6)

是的,你可以。

>>> [e for e in range(3) for _ in [0]*4]
[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]

答案 1 :(得分:6)

整数除法可以提供帮助:

[x/4 for x in range(12)]

同样的事情map

map(lambda x: x/4, range(12))

在python 3中,整数除法用//完成。

请注意,列表的乘法可能会导致result you probably don't expect

答案 2 :(得分:3)

itertools模块始终是一个选项:

>>> from itertools import chain, repeat
>>> list(chain(repeat(0, 4), repeat(1, 4), repeat(2, 4)))
[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]

更通用的方法是:

def done(group_count, repeat_count):
    return list(chain(*map(lambda i: repeat(i, repeat_count),
                           range(group_count))))
>>> done(3, 4)
[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]

答案 3 :(得分:3)

没有任何明确的“for”:)

>>> list(chain(*zip(*([range(5)] * 5))))
[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4]

答案 4 :(得分:1)

这个怎么样:

>>> sum([ [x]*4 for x in range(5)],[])
[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]
>>>

>>> reduce(lambda x,y: x+y, [ [x]*4 for x in range(5)])
[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]
>>>

答案 5 :(得分:0)

如果您不能在当前方法中使用循环,请在另一个中创建一个循环?

range(0,1)*4 + range(1,2)*4 + range(2,3)*4