【问题标题】:How to generate list with repeating items?如何生成包含重复项目的列表?
【发布时间】:2021-07-19 07:09:51
【问题描述】:

假设我想使用列表理解创建如下列表:

["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']]

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

【问题讨论】:

    标签: python-3.x list-comprehension repeat flatten


    【解决方案1】:

    你可以使用函数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】:

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

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

      【讨论】:

      • 天啊,我为什么没想到呢?也谢谢你 ! (我很难选择一个接受......)
      • 虽然@duckboycool 接受的答案非常好并且有效,但我发现这个答案更直观。
      【解决方案3】:

      使用列表推导可以做到这一点的一种简单方法是使用整数除法。

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

      【讨论】:

      • 哇,太棒了,我从来没有想过这个!非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      相关资源
      最近更新 更多