发生True时循环不会中断

2024-10-04 09:23:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

是虫子吗


Tags: intrueforlenifrange语句all
3条回答

首先,纠正代码段中的错误。您想要的代码段是

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

这应该可以解决它

您正在break运行的是内部循环,而不是外部循环,因此外部循环将继续,然后再次运行内部循环(当[7, 8, 9]包含在[9, 7, 8, 2]中时,内部循环本身就是break

a number of solutions for ^{}ing multiple loops供你看

如本文所述,您并没有脱离外部循环:

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))

相关问题 更多 >