欢迎访问宙启技术站
智能推送

Python函数:如何找到列表中的中位数

发布时间:2023-06-09 11:36:04

列表中的中位数是指列表中排在中间位置的数,如果列表的长度为奇数,则中位数就是列表中间的数;如果列表的长度为偶数,则中位数是中间两个数的平均值。找到列表中的中位数可以通过以下两种方法实现:

方法一:排序法

将列表从小到大排序,然后可以根据列表长度的奇偶性得到中位数。

代码实现如下:

def find_median(nums):

    nums_sorted = sorted(nums)

    n = len(nums_sorted)

    if n % 2 == 0:

        return (nums_sorted[n//2 - 1] + nums_sorted[n//2]) / 2

    else:

        return nums_sorted[n//2]

# 测试

nums = [1, 2, 3, 4, 5]

print(find_median(nums))  # 输出:3

nums = [1, 2, 3, 4, 5, 6]

print(find_median(nums))  # 输出:3.5

方法二:计数法

可以使用一个计数器统计列表中每个数出现的次数,然后从小到大遍历列表,当计数器累加到了列表长度的一半时,就可以得到中位数。

代码实现如下:

def find_median(nums):

    counter = {}

    for num in nums:

        counter[num] = counter.get(num, 0) + 1

    

    n = len(nums)

    acc = 0

    for num in sorted(counter):

        acc += counter[num]

        if acc > n//2:

            return num

# 测试

nums = [1, 2, 3, 4, 5]

print(find_median(nums))  # 输出:3

nums = [1, 2, 3, 4, 5, 6]

print(find_median(nums))  # 输出:3

这两种方法的时间复杂度都是O(nlogn),其中排序法需要额外的空间,而计数法则不需要。因此,在大数据量的情况下,推荐使用计数法。但在小数据量的情况下,排序法的代码更简单易懂。