Python:break语句不适用于for循环

时间:2019-01-23 07:27:18

标签: python

到目前为止,这是我的代码。我有一个如下列表启动,其长度为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中呢?

1 个答案:

答案 0 :(得分:1)

这是因为您如何遍历并将所有sublist匹配项添加到dict_of_prefixes。您所缺少的是当匹配self.num时何时实际添加列表的逻辑。

考虑以下代码段,我们仅在is_match保持True的情况下添加一些内容,否则我们会中断甚至不考虑(为简单起见,我删除了print s个)

...

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

...