我想找到列表中没有的最高号码。中断应该结束最后一个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
答案 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