簡體   English   中英

Python:break語句不適用於for循環

[英]Python: break statement not working in for loop

到目前為止,這是我的代碼。 我有一個如下列表啟動,其長度為3。目標是返回最長列表的長度,該長度與self.nums相同。

self.nums = ['1', '2', '3']
ourPrefixLen = len(self.nums)   # outputs 3

dict_of_prefixes = {}    # to be populated

for url, list_blocks in chains.items():
    print("URL - ")
    print(url)
    print("list_blocks - ")
    print(list_blocks)

    for i in range(ourPrefixLen):
        print('i - ')
        print(i)
        print("self.nums[i] - ")
        print(self.nums[i])
        print("list_blocks[i] - ")
        print(list_blocks[i])
        if self.nums[i] != list_blocks[i]:
            print("BREAK")
            break
        print("NOOO")
        dict_of_prefixes[url] = list_blocks

print("HERE")

length = 0
longest = ""
for url, chain in dict_of_prefixes.items():
    if len(chain) > length:
        length = len(chain)
        longest = url
return longest

chains是一本字典。 這是我失敗的測試用例:

chains = {'a':['1', '2', '3'], 'b':['1','2','3'], 'c':['1','3','4','5']}

結果應該是3(最長鏈的長度,其前綴與self.nums相同,但是我得到的4不正確( c的長度),所以我的代碼仍然將c添加到dict_of_prefixes中,即使它是

包括所有這些打印語句,這是相關的輸出:

URL - 

c

list_blocks - 

['1', '3', '4', '5']

self.nums[i] - 

1

list_blocks[i] - 

1

self.nums[i] - 

2

list_blocks[i] - 

3

BREAK

HERE

因此,這表明它正在進入Break語句的情況,並且不將c添加到dict_of_prefixes 那么,為什么c仍被添加到dict_of_prefixes?

這是因為您如何遍歷並將所有sublist匹配項添加到dict_of_prefixes 您缺少的是何時匹配self.num時實際添加列表的邏輯。

考慮下面的代碼片段,我們僅在is_match保持為True添加一些內容,否則我們會中斷甚至不考慮它(為簡單起見,我刪除了print

...

is_match = True # Assume that this sublist is a match
for i in range(ourPrefixLen):
  if self.nums[i] != list_blocks[i]:
      is_match = False
      break
if is_match:
  dict_of_prefixes[url] = list_blocks

...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM