【问题标题】:Combine enumerate + itertools.izip in Python在 Python 中结合 enumerate + itertools.izip
【发布时间】:2011-08-18 12:22:02
【问题描述】:

我想在 Python 中迭代 + 枚举两个列表。下面的代码看起来很难看。有没有更好的解决方案?

for id, elements in enumerate(itertools.izip(as, bs)):
  a = elements[0]
  b = elements[1]
  # do something with id, a and b

谢谢。

【问题讨论】:

    标签: python itertools enumerate


    【解决方案1】:

    您可以在 for 循环期间分配 a 和 b:

    for id, (a, b) in enumerate(itertools.izip(as, bs)):
      # do something with id, a and b
    

    【讨论】:

    • 您可以相信 Python 有一个不错且简单的解决方案 :)。
    【解决方案2】:

    您可以使用itertools.count 代替enumerate

    for id_, a, b in itertools.izip(itertools.count(), as_, bs):
      # do something with id_, a and b
    

    请注意,我稍微更改了变量名称以避免保留字和内置名称。

    【讨论】:

    • 根据 PEP-8 对变量名称进行了很好的更改,但使用 itertools.count 而不是 enumerate 实际上并不是一种改进。
    • 恕我直言,这是一个改进,因为您可以使用 itertools.izip(itertools.count(), as_, bs) 表达式作为 multiprocessing.pool.map_async() 的参数,这对于 for 循环来说并不方便。
    猜你喜欢
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2020-11-12
    • 2020-04-29
    • 2010-10-25
    • 2021-04-03
    相关资源
    最近更新 更多