python3 zip结果使用了两次

时间:2014-06-08 21:50:51

标签: list python-3.x iterator

我在Python 3中的两个不同zip循环中的两个列表上使用了for的两倍结果。什么是写这个的最pythonic方式?

  1. 两次使用zip()

    for j in range(123) :
        for x,y in zip(list1,list2) :
            doSomething()
    ....
    for x,y in zip(list1,list2) :
        doSomethingElse()
    
  2. 将zip的结果存储为列表

    z=list(zip(list1,list2))
    for j in range(123) :
        for x,y in z :
            doSomething()
    for x,y in z :
        doSomethingElse()
    
  3. 我非常感谢在这两种情况下都能听到Python的内部结构。

1 个答案:

答案 0 :(得分:1)

我会使用第一种方法:

for j in range(123) :
    for x,y in zip(list1,list2) :
        doSomething()
....
for x,y in zip(list1,list2) :
    doSomethingElse()

在Python 3中,zip方法不会从现有列表中创建新的对列表。它只是创建一个迭代器,引用每次迭代的输入列表。与创建全新列表的Python 2方式相比,它非常有效。

出于这个原因,你可以多次使用zip命令,因为我相信这使得代码更容易阅读和更简洁(没有在代码顶部实例化新的列表引用,通常你想要如果你可以避免它,就避免创建命名引用,因为它给你一个你需要记住的引用名称 - 这也是匿名函数更具吸引力的部分原因。)