Python函数:如何找到列表中的中位数
列表中的中位数是指列表中排在中间位置的数,如果列表的长度为奇数,则中位数就是列表中间的数;如果列表的长度为偶数,则中位数是中间两个数的平均值。找到列表中的中位数可以通过以下两种方法实现:
方法一:排序法
将列表从小到大排序,然后可以根据列表长度的奇偶性得到中位数。
代码实现如下:
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),其中排序法需要额外的空间,而计数法则不需要。因此,在大数据量的情况下,推荐使用计数法。但在小数据量的情况下,排序法的代码更简单易懂。
