wim*_*wim 6 python list generator range
所以每个人都知道我可以得到这样的数字列表range
:
>>> range(5)
[0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
如果我想要,比方说,我可以使用每个数字的3份副本:
>>> range(5)*3
[0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
但有没有办法用来range
重复这样的副本呢?
[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
Run Code Online (Sandbox Code Playgroud)
有一种快速而优雅的内置方式吗? sorted(range(5)*3)
有不必要的n*log(n)复杂性,并且[x//3 for x in range(3*5)]
工作但似乎是滥用//
操作.
JBe*_*rdo 15
你可以做:
>>> [i for i in range(5) for _ in range(3)]
[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
Run Code Online (Sandbox Code Playgroud)
该range(3)
部分应该与您的重复次数来替代......
顺便说一句,你应该使用发电机
为了使它更清楚,它_
是一个你不关心的变量名(允许任何名称).
这个列表理解使用嵌套for
循环,就像这样:
for i in range(5):
for j in range(3):
#your code here
Run Code Online (Sandbox Code Playgroud)
试试这个:
itertools.chain.from_iterable(itertools.repeat(x, 3) for x in range(5))
Run Code Online (Sandbox Code Playgroud)