我在Python中有两个迭代,我想成对地遍历它们:
foo = (1, 2, 3)
bar = (4, 5, 6)
for (f, b) in some_iterator(foo, bar):
print "f: ", f, "; b: ", b
Run Code Online (Sandbox Code Playgroud)
它应该导致:
f: 1; b: 4
f: 2; b: 5
f: 3; b: 6
Run Code Online (Sandbox Code Playgroud)
一种方法是迭代索引:
for i in xrange(len(foo)):
print "f: ", foo[i], "; b: ", b[i]
Run Code Online (Sandbox Code Playgroud)
但这对我来说似乎有点不合时宜.有没有更好的方法呢?
有没有聪明的方法可以在多个列表上编写列表理解?
我知道我可以使用单独的范围列表作为索引,但这样我必须知道长度(或通过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)]
Run Code Online (Sandbox Code Playgroud)
我喜欢这样的东西:
>>> [(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)]
Run Code Online (Sandbox Code Playgroud)
你会怎么写列表理解?有没有办法用itertools做到这一点?
范围列表只代表任何列表,我不一定想得到元组.还可以有一个以a和b为参数的函数.拉链不是我想要的.
更新:"所以拉链不是我想要的." 我的意思是我不想要zip(range(10), range(10, 0, …