如何生成包含重复项的列表?
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']
假设我想创建一个如下所示的带有列表理解的列表:
["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']