You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:54:03