程序在 break 语句后继续执行循环

Program continues through the loop after a break statement

我是 python 的新手,我遇到了一些练习题。问题是:

#Given an array, return the first recurring character
#Example1 : array = [2,1,4,2,6,5,1,4]
#It should return 2
#Example 2 : array = [2,6,4,6,1,3,8,1,2]
#It should return 6


lsts = [2,5,1,2,3,5,1,2,4]
    
def findDouble(arrs):
  repeats = dict()
  for arr in arrs:
    repeats[arr] = repeats.get(arr, 0) + 1
    if repeats[arr] == 2: break
    print(arr)
        
        
    
findDouble(lsts)
    
#0(n)

我的理解是,在“中断”之后它应该结束循环,所以我应该只得到 2。相反,它经历了整个过程,我得到了 2、5 和 1。我没有得到什么?

在赋值repeats[arr] = ...

之后直接加上print(repeats)可能会更容易理解

迭代 1:arr == 2

{2: 1} # key `2` was created and assigned `0 + 1`

迭代 2:arr == 5

{2: 1, 5: 1} # key `5` created and assigned  `0 + 1`

迭代 3:arr == 1

{2: 1, 5: 1, 1: 1} # key `1` created and assigned `0 + 1`

迭代 4:arr == 2

{2: 2, 5: 1, 1: 1} # key `2` was already present, assigned `1 + 1`
repeat[arr] == 2: # evaluates to True, so it breaks

第一次循环,arrs是2,那个键在字典中还不存在,所以repeats[2]被创建,值为1,程序打印2.

第二次循环,arrs是5。那个键在字典中还不存在,所以repeats[5]被创建,值为1,程序打印5.

第三次循环,arrs为1。字典中还不存在那个键,所以repeats[1]被创建,值为1,程序打印1.

第四次循环,arrs为2,字典中已经存在该key值为1,所以repeats[2]被赋予新值2,循环休息。