一个列表理解中的多个列表的Python值

时间:2012-03-22 16:51:49

标签: python list iterator list-comprehension

有没有聪明的方法可以在多个列表上编写列表解析?

我知道我可以使用单独的范围列表作为索引,但这样我必须知道长度(或者通过len()函数调用单独获取它。)

>>> a = range(10)
>>> b = range(10, 0, -1)
>>> [(a[x],b[x]) for x in range(10)]
[(0, 10), (1, 9), (2, 8), (3, 7), (4, 6), (5, 5), (6, 4), (7, 3), (8, 2), (9, 1)]

我喜欢这样的事情:

>>> [(a,b) for a in range(10) and b in range(10, 0, -1)]
[(0, 10), (1, 9), (2, 8), (3, 7), (4, 6), (5, 5), (6, 4), (7, 3), (8, 2), (9, 1)]

你会如何编写列表理解?有没有办法用itertools做到这一点?

范围列表只代表任何列表,我不一定想得到元组。还可以有一个以a和b为参数的函数。拉链不是我想要的。

更新:“所以拉链不是我想要的。”我的意思是我不想要zip(range(10), range(10, 0, -1))

2 个答案:

答案 0 :(得分:20)

你的例子就是:

zip(range(10), range(10, 0, -1))

更一般地说,您可以使用zip加入任何一组迭代:

[func(a, d, ...) for a, b, ..., n in zip(iterable1, iterable2, ..., iterableN)]

答案 1 :(得分:1)

如果要将函数应用于多个序列,则需要mapitertools.imap

map(lambda *x: sum(x), range(10), range(10, 0, -1), range(0,20, 2))

除非您更喜欢在列表理解中进行映射,否则无需压缩