Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环don';当真的发生时,它不会中断_Python_Loops_Break - Fatal编程技术网

Python 循环don';当真的发生时,它不会中断

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

如果出现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 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循环。