python range()有重复吗?

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)

  • 我正在谈论的生成器是:`(i for x in xrange(5)for j in xrange(3))` (3认同)

Mic*_*ber 8

试试这个:

itertools.chain.from_iterable(itertools.repeat(x, 3) for x in range(5))
Run Code Online (Sandbox Code Playgroud)