使用列表理解列出操作

时间:2012-04-18 13:08:02

标签: python list loops

我有一份清单。

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,但我不知道如何使用列表推导相同。

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

提前感谢。

3 个答案:

答案 0 :(得分:8)

对于First,您可以执行类似

的操作
>>> [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]]

对于Second,您只需阅读并生成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'))

答案 1 :(得分:4)

output1 = [a[i:i+4] for i in xrange(0,len(a),4)]
output2 = [('value',i) for i in a]

答案 2 :(得分:4)

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

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

对于你的第二个:zip(repeat('value'), a)