如何生成包含重复项的列表?

How to generate list with repeating items?

假设我想创建一个如下所示的带有列表理解的列表:

["2", "2", "2", "3", "3", "3", "4", "4", "4"]

我试过:

>>> [*[str(n)] * 3 for n in range(2, 5)]

  File "<stdin>", line 1
SyntaxError: iterable unpacking cannot be used in comprehension

>>> [str(n) * 3 for n in range(2, 5)]
['222', '333', '444']

我在哪里得到了数字,但是在一个字符串中,并且

>>> [[str(n)] * 3 for n in range(2, 5)]
[['2', '2', '2'], ['3', '3', '3'], ['4', '4', '4']]

我得到了一个嵌套列表,但想要一个平面列表。这可以用简单的方式完成吗,还是我必须采用嵌套列表方法并将列表展平?

使用列表推导式执行此操作的一种简单方法是使用整数除法。

[str(n // 3) for n in range(6, 15)]

嵌套的 for 循环是您最好的选择。我认为这是最简单的解决方案:

[str(n) for n in range(2, 5) for i in range(3)]

可以使用函数chain函数 来自 itertools 库以展平列表。

>>> from itertools import chain
>>> list(chain(*[[str(n)] * 3 for n in range(2, 5)]))
['2', '2', '2', '3', '3', '3', '4', '4', '4']