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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:03:34