我知道是否要创建这样的列表:
[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]
我的意思是没有循环的方式
答案 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