python-如何并行遍历两个列表?

发布于 2021-02-02 23:24:52

在Python中有两个可迭代的对象,我想成对地讨论它们:

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]
关注者
0
被浏览
335
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    Python 3

    for f, b in zip(foo, bar):
        print(f, b)
    

    foobar的较短者停止时,zip停止。

    在Python 3 zip 中,像itertools.izip在Python2中一样,返回元组的迭代器。要获取元组列表,请使用list(zip(foo, bar))。要压缩直到两个迭代器都用尽,可以使用 itertools.zip_longest

    Python 2

    在Python 2中,zip 返回一个元组列表。当foobar不是很大时,这很好。如果它们都是大量的,则形成zip(foo,bar)是不必要的大量临时变量,应将其替换为itertools.izipitertools.izip_longest,这将返回迭代器而不是列表。

    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)
    

    izipfoobar已耗尽时停止。 izip_longest当两个停止foobar耗尽。当较短的迭代器用尽时,将izip_longest产生一个元组,None其位置与该迭代器相对应。你还可以设置不同fillvalue之外None,如果你想。看到这里的完整故事。

    还要注意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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看