如何在python中循环的结尾而不是循环的开头进行迭代,而无需做while?

问题描述 投票:-1回答:2

原谅我,我是python的新手。

在其他语言中,当我想在循环的结尾而不是在开始时进行迭代时,我会使用do while循环。

Python没有do while,所以我这样做了:

iter_ = zip(x_list, y_list)
x,y = initial_values()
while x:
    foo(x,y)
    x,y = next(iter_,(False,False))

这很好,但是我不完全满意:

  • 默认的(False,False)元组。不过我觉得比较可取到try except: StopIteration; break
  • 使用x作为条件,因为x可以是在逻辑测试中可以合理解释为False的元素。但是,我发现最好引入一个单独的条件变量并进行测试,除了next()调用

在循环的末尾而不是循环的开始执行迭代的最佳/最python惯用方式是什么?

python do-while
2个回答
0
投票

关于:

z = set_z_for_first_pass()  
for x,y in zip(x_list,y_list):
   if not x: break
   foo(x,y,z)
   z = set_z_for_subsequent_passes()

0
投票

我认为回答问题的方式有两种。

[首先,仅解决问题,我想说您使用do...while循环的用例是人为的,并且可能来自使用这种复杂思维的其他语言。在Python中,我将使用:

z = calc_z_for_first_pass()
for x,y in zip(x_list, y_list) 
    foo(x,y,z)
    z = calc_z_for_subsequent_passes()

第二,确实有些情况下您想要一个do...while循环,例如:

do:
    z = calc_z()
while not is_valid(z)

在这种情况下,您需要手动模拟自己的do...while循环(请参见Olvin建议的[Emulate a do-while loop in Python?):

while True:
    z = calc_z()
    if is_valid(z):
        break
© www.soinside.com 2019 - 2024. All rights reserved.