如何修复统计整数列表连续数对数量的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
相关产品推荐
相关产品推荐

