【问题标题】:how to use zip efficiently to iterate parallelly in multiple lists如何有效地使用 zip 在多个列表中并行迭代
【发布时间】:2022-12-06 20:45:15
【问题描述】:

有没有什么办法可以在使用 ZIP 函数时为不存在的并行元素提供一些默认值并仍然打印整个内容?

例如,对于下面的代码6个列出一个错过了但我不想发生这种事

a = [1,2,4,6]
b = [[1,3],[4,7],[6,1]]
for a,(b,c) in zip(a,b):
  print(a,b,c)

【问题讨论】:

    标签: python arrays python-3.x list zip


    【解决方案1】:

    itertools 中的 zip_longest 函数应该完全符合您的要求:

    from itertools import zip_longest
    
    a = [1,2,4,6]
    b = [[1,3],[4,7],[6,1]]
    for a,(b,c) in zip_longest(a,b, fillvalue=("NaN1", "NaN2")):
       print(a,b,c)
    

    【讨论】:

      【解决方案2】:

      您可以使用 zip_longest 为代码中缺失的元素提供默认值:

      from itertools import zip_longest
      
      a = [1, 2, 4, 6]
      b = [[1, 3], [4, 7], [6, 1]]
      
      for a, (b, c) in zip_longest(a, b, fillvalue=(0, 0)):
          print(a, b, c)
      

      这将打印以下输出:

      1 1 3
      2 4 7
      4 6 1
      6 0 0
      

      zip_longest 函数自动为输入iterables 中缺失的元素添加默认值 0。您可以通过在 fillvalue 参数中指定它来将默认值更改为您想要使用的任何其他值。

      【讨论】:

      • 你试过运行这个吗?
      • 是的,我在 python 3.10.6 上测试过它
      • 也许编辑,原来的答案引发了一个例外。您应该在发布之前测试您的答案。
      猜你喜欢
      • 2012-01-05
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多