【问题标题】:How do I add 2 elements for each iteration in a python shorthand list?如何在 python 速记列表中为每次迭代添加 2 个元素?
【发布时间】:2020-08-27 02:20:54
【问题描述】:

我想写一个像[i*2, i*3 for i in range(10)] 这样的列表,这样我就可以得到[0, 0, 2, 3, 4, 6, 6, 9, 8, 12...] 的输出(所以对于range(10) 中的每个元素,我想从两个计算中将2 个元素添加到列表中)。

【问题讨论】:

  • [x for i in range(10) for x in (i * 2, i * 3)]?请注意,它还将包含两个零。
  • 为什么最好的答案总是留给 cmets @jonrsharpe

标签: python python-3.x list shorthand


【解决方案1】:

使用itertools.chain.from_iterable,或any other Python iterable-flattening approach

>>> list(itertools.chain.from_iterable([(i*2, i*3) for i in range(10)]))
[0, 0, 2, 3, 4, 6, 6, 9, 8, 12, 10, 15, 12, 18, 14, 21, 16, 24, 18, 27]

【讨论】:

  • 实际上不需要作为列表传递:list(itertools.chain.from_iterable((i*2, i*3) for i in range(10)))。只需通过一个生成器就可以了。
【解决方案2】:

更新:

[ i*k for i in range(10) for k in (2, 3) ]

原文:

通过列表理解保持简单:

[ i*k for i in range(10) for k in range(2,4) ]

【讨论】:

    【解决方案3】:

    列表推导式中有两个 for 语句怎么样?

    [i*j for i in range(10) for j in [2, 3]]
    

    【讨论】:

      【解决方案4】:
      sum((map(lambda x: [x*2, x*3], range(10))), [])
      

      输出

      [0, 0, 2, 3, 4, 6, 6, 9, 8, 12, 10, 15, 12, 18, 14, 21, 16, 24, 18, 27]
      

      我们也可以这样做,没有任何循环。

      【讨论】:

      • 我不明白为什么我的回答无关紧要?谁能解释一下?
      • 它是相关的,但我认为它的效率低于其他答案...... idk
      猜你喜欢
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2020-02-28
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      相关资源
      最近更新 更多