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

Python使用位置参数调用函数遇问题:给定代码故障成因排查

问题分析与修复方案

咱们直接拆解你的代码问题:既有类方法定义不符合Python规范导致的参数调用异常,还有中位数计算逻辑完全偏离需求的问题,一个个说清楚:

一、位置参数调用异常的直接原因

在Python类中,实例方法的第一个参数必须是self(用来指代类的实例本身),但你的findMedianSortedArrays方法没有这个参数。如果尝试像这样调用:

sol = Solution()
sol.findMedianSortedArrays([1,3], [2])

Python会自动把sol这个实例作为第一个参数传入方法,但你的方法只定义了n1和n2两个参数,立刻就会触发TypeError: findMedianSortedArrays() takes 2 positional arguments but 3 were given的异常。

如果不想用实例方法,也可以给方法加上@staticmethod装饰器,把它改成静态方法,这样就不需要self参数了。

二、中位数计算逻辑的核心错误

你的代码里用n3 = n1 + n2是numpy数组的元素级相加,不是合并两个数组。比如n1 = [1,2],n2 = [3,4],执行后n3会是[4,6],这完全不是把两个数组的所有元素整合到一起。就算你想求平均值,这也不是两个数组所有元素的平均值,更别说中位数了。

正确的中位数计算步骤应该是:

  1. 合并两个输入的有序数组
  2. 对合并后的数组排序(如果输入本身是有序的,其实可以用双指针法实现O(log(m+n))的高效算法,这里先从基础实现说起)
  3. 根据数组长度的奇偶性计算中位数:
    • 长度为奇数时,取中间位置的元素
    • 长度为偶数时,取中间两个元素的平均值

修复后的代码示例

方案1:使用实例方法

import numpy as np

class Solution():
    # 添加self参数,符合实例方法规范
    def findMedianSortedArrays(self, n1, n2):
        # 合并两个数组,而非元素级相加
        merged = np.concatenate([np.array(n1), np.array(n2)])
        # 对合并后的数组排序
        merged_sorted = np.sort(merged)
        length = len(merged_sorted)
        if length % 2 == 1:
            # 奇数长度,返回中间元素
            return merged_sorted[length // 2]
        else:
            # 偶数长度,返回中间两元素的平均值
            mid_left = merged_sorted[(length // 2) - 1]
            mid_right = merged_sorted[length // 2]
            return (mid_left + mid_right) / 2

# 调用示例
sol = Solution()
print(sol.findMedianSortedArrays([1,3], [2]))  # 输出2.0
print(sol.findMedianSortedArrays([1,2], [3,4]))  # 输出2.5

方案2:使用静态方法

import numpy as np

class Solution():
    @staticmethod
    def findMedianSortedArrays(n1, n2):
        merged = np.concatenate([np.array(n1), np.array(n2)])
        merged_sorted = np.sort(merged)
        length = len(merged_sorted)
        if length % 2 == 1:
            return merged_sorted[length // 2]
        else:
            mid_left = merged_sorted[(length // 2) - 1]
            mid_right = merged_sorted[length // 2]
            return (mid_left + mid_right) / 2

# 调用示例
print(Solution.findMedianSortedArrays([1,3], [2]))  # 输出2.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:32:28