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

如何修复统计整数列表连续数对数量的Python代码?

修复连续整数对统计代码

问题说明

给定整数列表,统计所有位置靠前元素与位置靠后元素组成的数对中,差值绝对值为1的连续数对数量(如列表[1,2,5,8]仅(1,2)符合条件,返回1)。原代码在处理[1,2,3,4,5,6,7,8,9]时返回错误结果,核心问题是返回值计算逻辑错误。

原代码错误点

  • 最终返回的len([(res[i][0],res[i][1])])仅取了循环结束后i对应的最后一个数对,无论符合条件的数对有多少,都会固定返回1,完全不符合统计需求。
  • 先生成所有数对再筛选的方式,对于长列表内存占用较高(时间复杂度O(n²)),可优化为直接计数。

修复方案

方案1:修正原逻辑(保留数对生成)

直接筛选符合条件的数对并统计数量:

def count_pairs(L):
    assert type(L) == list
    # 生成所有i<j的数对(位置靠前的元素在前)
    all_pairs = [(a, b) for idx, a in enumerate(L) for b in L[idx + 1:]]
    # 筛选连续整数对
    consecutive_pairs = [pair for pair in all_pairs if abs(pair[0] - pair[1]) == 1]
    # 打印符合条件的数对(可选)
    for pair in consecutive_pairs:
        print(pair)
    # 返回统计数量
    return len(consecutive_pairs)

方案2:优化遍历逻辑(节省内存)

无需生成所有数对,直接遍历计数,内存占用更低:

def count_pairs(L):
    assert type(L) == list
    count = 0
    list_length = len(L)
    # 遍历所有i<j的元素组合
    for i in range(list_length):
        for j in range(i + 1, list_length):
            if abs(L[i] - L[j]) == 1:
                print((L[i], L[j]))
                count += 1
    return count

测试验证

对于测试用例L1=[1,2,3,4,5,6,7,8,9],两个方案都会返回8(符合条件的数对为(1,2),(2,3),...,(8,9)共8个),通过测试。

内容的提问来源于stack exchange,提问作者GS81

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:30:20