Python查找数组中无法配对数字的代码实现问题求解
需求说明
实现一个功能函数,查找序列中无法与其他元素配对的数字:如果某个数字无法找到另一个完全相同的数字与之配对,就需要将其作为结果返回。
示例
输入序列:[1,1,1,1, 2, 3, 4]
预期返回结果:[2,3,4]
待排查的问题代码
def pair(input): while len(input) > 2: for i in range(len(input) - 1): for j in range(len(input) - 1): print(input) if input[i] == input[j]: input.pop(i) input.pop(j) print(input) else: break return input print(pair([1,1,1,1, 2, 3, 4]))
原代码问题点
- 索引匹配逻辑错误:双层循环的j从0位开始遍历,当i和j指向同一个位置时,元素必然相等,会把同一个元素错误判定为配对成功弹出两次,完全不符合配对规则
- 遍历中直接修改原列表:
pop操作会实时改变列表长度和元素索引位置,但range生成的索引序列是基于循环启动时的列表长度生成的,运行时会出现索引越界、漏遍历元素的问题 - 内层循环终止逻辑错误:只要遇到第一个和
input[i]不相等的元素就直接break终止内层循环,不会遍历后续位置查找真正的匹配项 - 外层循环判断条件无效:
len(input) > 2的终止条件和配对逻辑没有关联,比如剩余3个相同元素时也会直接终止循环,无法正确完成配对判定
修正实现
核心思路:统计每个数字的出现次数,每两个相同数字凑成一对,出现次数为奇数的数字就是最后无法配对的元素,实现简单且不会出现索引混乱问题。
from collections import Counter def pair(input_list): num_count = Counter(input_list) return [num for num, cnt in num_count.items() if cnt % 2 == 1] print(pair([1,1,1,1, 2, 3, 4]))
如果不想依赖内置计数库,也可以手动实现计数逻辑:
def pair(input_list): num_count = {} for num in input_list: num_count[num] = num_count.get(num, 0) + 1 res = [] for num, cnt in num_count.items(): if cnt % 2 == 1: res.append(num) return res print(pair([1,1,1,1, 2, 3, 4]))
运行以上代码,都会输出预期结果[2,3,4]。
内容的提问来源于stack exchange,提问作者StudentHus
相关产品推荐
相关产品推荐

