有没有聪明的方法可以在多个列表上编写列表解析?
我知道我可以使用单独的范围列表作为索引,但这样我必须知道长度(或者通过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))
答案 0 :(得分:20)
你的例子就是:
zip(range(10), range(10, 0, -1))
更一般地说,您可以使用zip
加入任何一组迭代:
[func(a, d, ...) for a, b, ..., n in zip(iterable1, iterable2, ..., iterableN)]
答案 1 :(得分:1)
如果要将函数应用于多个序列,则需要map
或itertools.imap
:
map(lambda *x: sum(x), range(10), range(10, 0, -1), range(0,20, 2))
除非您更喜欢在列表理解中进行映射,否则无需压缩