Python 循环don';当真的发生时,它不会中断
如果出现True,我希望循环中断。出于某种原因,break语句使事情变得扭曲Python 循环don';当真的发生时,它不会中断,python,loops,break,Python,Loops,Break,如果出现True,我希望循环中断。出于某种原因,break语句使事情变得扭曲 a = [[1,2,3], [4,5,6], [7,8,9], [1,4,7], [2,5,8], [3,6,9], [1,5,9], [7,5,3]] b = [[9], [9, 7], [9, 7, 8], [9, 7, 8, 2]] countdata = [] for x in range(len(b)): for y in range(len(a)): if all(elem in
a = [[1,2,3], [4,5,6], [7,8,9], [1,4,7], [2,5,8], [3,6,9], [1,5,9], [7,5,3]]
b = [[9], [9, 7], [9, 7, 8], [9, 7, 8, 2]]
countdata = []
for x in range(len(b)):
for y in range(len(a)):
if all(elem in b[x] for elem in a[y]) == True:
break
countdata.append(all(elem in b[x] for elem in a[y]))
print(len(countdata))
输出:
>>>20
输出应该是18。证明:
countdata = []
for x in range(len(b)):
for y in range(len(a)):
tt = all(elem in b[x] for elem in a[y] )
countdata.append(tt)
nylista = []
for z in countdata:
if z == True:
break
nylista.append(z)
print(len(nylista))
>>>18
这是一个bug吗?您正在
中断内环,而不是外环,因此外环继续,然后再次运行内环(当[7,8,9]
包含在[9,7,8,2]
中时,内环本身中断s)
这里有一些供您查看。如本文所述,您并没有脱离外部循环:
a = [[1,2,3], [4,5,6], [7,8,9], [1,4,7], [2,5,8], [3,6,9], [1,5,9], [7,5,3]]
b = [[9], [9, 7], [9, 7, 8], [9, 7, 8, 2]]
countdata = []
inner_break = False
for x in range(len(b)):
if inner_break:
break
for y in range(len(a)):
if all(elem in b[x] for elem in a[y]) == True:
inner_break = True
break
countdata.append(all(elem in b[x] for elem in a[y]))
print(len(countdata))
首先,纠正代码段中的错误。您想要的代码段是
countdata = []
for x in range(len(b)):
for y in range(len(a)):
if all(elem in b[x] for elem in a[y]) == True:
break
countdata.append(all(elem in b[x] for elem in a[y]))
接下来,当您遇到break
语句时,您将仅退出内部循环。因此答案不同
countdata = []
in_flag = False
for x in range(len(b)):
for y in range(len(a)):
if all(elem in b[x] for elem in a[y]) == True:
in_flag = True
break
countdata.append(all(elem in b[x] for elem in a[y]))
if in_flag:
break
这应该可以解决问题。给定您的代码,输出为1
。我没有查看您的代码,但这可能与此相关:请注意break
只转义最内部的for循环。