【问题标题】:list operations using list comprehension使用列表推导的列表操作
【发布时间】:2012-04-18 13:08:02
【问题描述】:

我有一个清单。

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

我想使用列表理解并希望将输出创建为:

output1 = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]

output2:
('value', 1)
('value', 2)
'
'
('value', 20)

我可以使用 for 循环创建 output1 和 output2,但我不知道如何使用列表理解。

如果有人知道,请告诉我。

提前致谢。

【问题讨论】:

  • 为什么需要列表理解?请发布您的for 循环。
  • 输出 2:输出 2 是什么?这是一个列表吗?
  • @Karoly Horvath output2 低于 output1,元组对

标签: python list loops


【解决方案1】:

首先你可以做类似的事情

>>> [a[i:i+4] for i in range(0,len(a),4)]
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]

对于第二个,您可以简单地读取并生成以value 作为第一项的元组

>>> [('value',i) for i in a]
[('value', 1), ('value', 2), ('value', 3), ('value', 4), ('value', 5), ('value', 6), ('value', 7), ('value', 8), ('value', 9), ('value', 10), ('value', 11), ('value', 12), ('value', 13), ('value', 14), ('value', 15), ('value', 16), ('value', 17), ('value', 18), ('value', 19), ('value', 20)]

使用 itertools.izip_longest 的另一个版本,尽管上面的内容更可红色

list(itertools.izip_longest([],a,fillvalue='value'))

【讨论】:

    【解决方案2】:
    output1 = [a[i:i+4] for i in xrange(0,len(a),4)]
    output2 = [('value',i) for i in a]
    

    【讨论】:

      【解决方案3】:

      这里是JF Sebastians's grouper,它解决了你的第一个问题:

       from itertools import izip_longest, repeat
       izip_longest(*[iter(a)]*4, fillvalue=None)
      

      第二个:zip(repeat('value'), a)

      【讨论】:

      • 我不知道但它的正确答案。我不知道为什么有些人只是投反对票而不给出理由
      猜你喜欢
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多