【问题标题】:How do you create a bidirectional for loop in Python elegantly?如何优雅地在 Python 中创建双向 for 循环?
【发布时间】:2017-12-20 20:37:57
【问题描述】:

在没有外部范围变量的情况下,您如何循环使用一个 var 将第一个元素向前传递,并使用相同的循环将最后一个元素向后传递另一个 var?有没有类似于 enumerate 的函数返回两个变量

【问题讨论】:

  • 为什么不运行两个单独的for 循环,一个向上计数,一个向下计数?
  • 那么我将无法同时访问这两个变量,它会使复杂性加倍
  • 我想不出你会需要同时访问两个彼此成反比的变量的情况。但可以肯定的是,假设“中点”是0,您可以在x 上的循环内设置类似y = -x 的内容。然后你就可以同时访问这两者,并且它们将成反比(只需要一行额外的代码)。
  • 有趣的是,你将如何使用负索引,尤其是奇数元素

标签: python for-loop python-3.5 bidirectional


【解决方案1】:

您可以zip 一个迭代器及其反向:

z = range(20,30)

for x,y in zip(z,reversed(z)):
    print(x,y)

结果:

20 29
21 28
22 27
23 26
24 25
25 24
26 23
27 22
28 21
29 20

但是,对于生成器,您必须强制迭代到 list,因为 reverse 需要一个序列

TypeError: argument to reversed() must be a sequence

listtuplerange 都可以。

g = (x for x in somefunc() if x > 0)
lst = list(g)
for x,y in zip(lst, reversed(lst)):
   ...

【讨论】:

  • 您能否展示一个使用正确的生成器会导致此示例出现问题的案例
  • 实际上,除非强制进入列表,否则它根本不适用于生成器。我已经编辑了我的帖子。
猜你喜欢
  • 1970-01-01
  • 2021-11-27
  • 2014-08-17
  • 2023-04-08
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
  • 2017-01-17
相关资源
最近更新 更多