Python循环判断重复元素下标差输出多布尔值,如何修改为仅返回一次结果
问题原因
你当前代码输出多个布尔值的原因有两点:
- 内层
for循环绑定的else子句,会在每一轮外层i循环跑完、内层j循环没有触发break时执行一次print(False),所以会输出多个False - 即使找到符合条件的元素打印了True,程序也不会终止,会继续执行剩余循环,还可能输出多余的结果
修改方案
方案1:基于原有双层循环逻辑修改(适合理解原有逻辑的场景)
新增标志位记录是否找到符合条件的元素,找到后直接终止所有循环,最后统一输出一次结果:
nums = [1,2,3,1] k = 3 # 初始化标志位,默认没找到符合条件的元素 has_match = False for i in range(len(nums)): for j in range(i+1, len(nums)): if nums[i] == nums[j] and abs(i - j) <= k: has_match = True # 跳出内层循环 break # 已经找到匹配,跳出外层循环 if has_match: break print(has_match)
方案2:哈希表优化(时间复杂度更低,适合大数据量场景)
用字典存储每个元素最后一次出现的索引,遍历一次就能得到结果,时间复杂度为O(n),远优于双层循环的O(n²):
nums = [1,2,3,1] k = 3 last_occur = {} has_match = False for index, num in enumerate(nums): # 如果当前元素之前出现过,且索引差小于等于k,匹配成功 if num in last_occur and index - last_occur[num] <= k: has_match = True break # 更新当前元素的最后出现位置 last_occur[num] = index print(has_match)
内容的提问来源于stack exchange,提问作者user16334850
相关产品推荐
相关产品推荐

