一个例子

  1. names = ['Cecilia', 'Lise', 'Marie']
  2. counts = [len(n) for n in names]
  3. print(counts)

image.png

如果要输出每个名字的长度

  1. for name, count in zip(names, counts):
  2. print(name, count)

如果增加一个 name,会怎么样

  • 会在最短的 list 里截断 ```python names.append(‘Rosalind’) for name, count in zip(names, counts): print(name)

Cecilia Lise Marie ```

那该怎么办

  • itertools.zip_longest

    1. import itertools
    2. for name, count in itertools.zip_longest(names, counts):
    3. print(f'{name}: {count}')
    4. >>>
    5. Cecilia: 7
    6. Lise: 4
    7. Marie: 5
    8. Rosalind: None

    小结

  • 内置的 zip 函数可以同时遍历多个迭代器。

  • zip 会创建惰性生成器,让它每次只生成一个元组,
    • 所以无论输入的数据有多长, 它都是一个一个处理的。
  • 如果提供的迭代器的长度不一致,那么只要其中任何一个迭代完毕,zip 就会停止。
  • 如果想按最长的那个迭代器来遍历,那就改用内置的 itertools 模块中的 zip_ longest 函数。