无法让这个break语句起作用

时间:2017-09-14 13:13:36

标签: python

我想找到列表中没有的最高号码。中断应该结束最后一个for循环并留下我的Ans =最高号码不在列表中。为什么不起作用

A = [1,3,5,9,11]

u = A[0]
for i in range(1, len(A)):
    if A[i] > u:
            u = A[i]
    if u <= 0:
        Ans = 1

    else:
        for j in range(u ,0, -1):
            if j not in A:
                Ans = j
                print(Ans)
                break

4 个答案:

答案 0 :(得分:1)

break让你脱离内循环,你也需要退出外循环。你可以使用布尔标志等来做到这一点......但我更喜欢使用for - else构造

for-else,表示no break,即当内循环中没有中断时,循环将在附加到else的{​​{1}}中恢复,否则,它将执行以下操作。 for,将您带到循环的末尾。

现在,您的逻辑似乎也有问题,打印的答案是continue

2

答案 1 :(得分:1)

正如已经提到的那样,break工作正常,从它所处的循环中断开 - 但不是从上面的循环开始!

除了使用for/else或将整个计算移动到函数中并使用return而不是break之外,您还可以使用生成器替换嵌套循环,懒洋洋地找到{{ 1}}满足条件的值。如果该值不是next(默认值),则来自外部循环的None

break

答案 2 :(得分:1)

您的break不起作用,因为您对if u <= 0:的缩进是错误的。

A = [-1, -3, -5, -9, -11]
Ans = 1
for j in range(max(A)-1, max(0, min(A)), -1):
    if j not in A:
        Ans = j
        print(Ans)
        break

但是,如果您的列表很大,我建议您使用NumPy,因为它更快。

# Find the highest number not in the list
import numpy as np

l = [1,3,5,9,11]
a = np.array(l)
ans = 1
for i in range(a.max()-1, max(0, a.min()), -1):
    if i not in a:
        ans = i
        print(i)
        break

答案 3 :(得分:1)

@ foo bar et al。

根据您的建议,似乎缩进是错误的。虽然你的所有其他建议都更加优雅,但我的解决方案却是:

A = [1,3,5,9,11]

u = A[0]
for i in range(1, len(A)):
    if A[i] > u:
            u = A[i]
if u <= 0:
    Ans = 1
    print(Ans)

else:
    for j in range(u ,0, -1):
            if j not in A:
                Ans = j
                print(Ans)
                break