i在范围(n)中的终止条件

时间:2019-05-27 09:04:59

标签: python python-3.x

我必须使用一些现有的(很旧的)C库的几乎1:1的Python翻译,然后发现了问题。

原始代码为:

int i, n;
//...
for (i = 0; i < n; i++)
    if (someCondition(i))
        doSomething();
        break;
if (i == n)
    doSomeOtherStuff();

它被翻译为

for i in range(n):
    if someCondition(i):
        doSomething()
        break
if i == n:
    doSomeOtherStuff()

问题是,如果i从不为真,则循环后n - 1等于someCondtion(i)

我的解决方法是

found = False
for i in range(n):
    if someCondition(i):
        doSomething()
        found = True
        break
if not found:
    doSomeOtherStuff()

有更好的解决方案吗?我希望代码更改最少的解决方案仍然能够比较C和Python实现。 Python代码仅用于测试,C实现是生产代码。因此,没有性能要求,只有可读性。

2 个答案:

答案 0 :(得分:6)

Python for statement有一个可选的else套件,如果项目用尽,则执行该套件,但是如果您break否则退出循环,则不是早。因此,您可以将代码编写为:

for i in range(n):
    if someCondition(i):
        doSomething()
        break
else:
    doSomeOtherStuff()

答案 1 :(得分:3)

使用更多的Python习语,例如for..else

for i in range(n):
    if some_condition(i):
        do_something()
        break
else:
    do_something_else()

如果循环中断,则执行else

或者,甚至更好:

if any(map(some_condition, range(n))):
    do_something()
else:
    do_something_else()

请参阅:anymap