如何并行迭代两个列表?
我在Python中有两个iterables,我想成对地去看看它们:
foo = (1, 2, 3) bar = (4, 5, 6) for (f, b) in some_iterator(foo, bar): print "f: ", f, "; b: ", b 它应该导致:
 f: 1; b: 4 f: 2; b: 5 f: 3; b: 6 
一种方法是迭代索引:
 for i in xrange(len(foo)): print "f: ", foo[i], "; b: ", b[i] 
但是这对我来说似乎有些不合理。 有没有更好的方法来做到这一点?
 for f, b in zip(foo, bar): print(f, b) 
  zip在foo或bar的较短部分停止时停止。 
 在Python 2中 , zip返回一个元组列表。 当foo和bar不是很大的时候,这很好。 如果它们都很庞大,那么形成zip(foo,bar)是一个不必要的巨大临时variables,应该由itertools.izip或itertools.izip_longestreplace,它将返回一个迭代器而不是一个列表。 
 import itertools for f,b in itertools.izip(foo,bar): print(f,b) for f,b in itertools.izip_longest(foo,bar): print(f,b) 
 当foo或bar耗尽时, izip停止。 当foo和bar都耗尽时, izip_longest停止。 当较短的迭代器耗尽时, izip_longest在对应于该迭代器的位置产生一个None的元组。 如果您愿意,也可以设置不同的fillvalue 。 看到这里的全部故事 。 
 在Python 3中 , zip返回元组的迭代器,如Python2中的itertools.izip 。 要获取元组列表,请使用list(zip(foo, bar)) 。 要压缩,直到两个迭代器都耗尽,您可以使用itertools.zip_longest 。 
 还要注意的是, zip和其类似zip的brethen可以接受任意数量的iterables作为参数。 例如, 
 for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'], ['red', 'blue', 'green']): print('{} {} {}'.format(num, color, cheese)) 
版画
 1 red manchego 2 blue stilton 3 green brie 
 你想要的zipfunction。 
 for (f,b) in zip(foo, bar): print "f: ", f ,"; b: ", b 
 内置zip正是你想要的。 如果你想要迭代而不是列表,你可以看看itertools.izip,它做同样的事情,但一次给出一个结果。 
 你在找什么叫做zip 。 
你应该使用“ zip ”function。 这里是你自己的zip函数的样子
 def custom_zip(seq1, seq2): it1 = iter(seq1) it2 = iter(seq2) while True: yield next(it1), next(it2) 
  zip函数解决了这个问题 
 文档: ZIP库function 
AIM:并排输出问题:
 #value1 is a list value1 = driver.find_elements_by_class_name("review-text") #value2 is a list value2 = driver.find_elements_by_class_name("review-date") for val1 in value1: print(val1.text) print "\n" for val2 in value2: print(val2.text) print "\n" 
 输出: 
  review1 
  review2 
  review3 
  DATE1 
  DATE2 
  DATE3 
解:
 for val1, val2 in zip(value1,value2): print (val1.text+':'+val2.text) print "\n" 
 输出: 
  review1:DATE1 
  review2:DATE2 
  review3:DATE3