python生成序列

Kam*_*ath 0 python

我有一个很大的序列相关问题要解决以下是子问题,我确信它在python中是非常基本的,我不知道.

seq = [4*x for x in range (1,(20/4))]
generates seq = [4, 8, 12, 16]
Run Code Online (Sandbox Code Playgroud)

我该怎么生成

[4, 4, 8, 8, 12, 12, 16]

seq = [4*x, 4*x for x in range (1,(20/4))] does not work
Run Code Online (Sandbox Code Playgroud)

我可以通过编写一个小函数轻松解决上述问题,但我在变量定义时需要它.

Gar*_*tty 7

您的解决方案不起作用,因为它生成一个元组列表.

您正在寻找的是一种平整您生成的列表的方法 - 最简单的方法是itertools.chain.from_iterable():

>>> list(itertools.chain.from_iterable([4*x]*2 for x in range(1, 5)))
[4, 4, 8, 8, 12, 12, 16, 16]
Run Code Online (Sandbox Code Playgroud)

如果您打算只使用一次最后一个值,就像在您的示例中一样,只需切片列表的末尾(seq[:-1]).

作为注释,您可以使用列表并将其相乘(假设值是不可变的,或者您不介意它们是同一个对象),而不是重复您想要的每个重复的值.另一种选择是itertools.repeat().