|
|
发表于 2022-3-4 21:22:58
|
显示全部楼层
本楼为最佳答案
本帖最后由 isdkz 于 2022-3-4 21:58 编辑
- from decimal import Decimal # 这个模块来处理小数不易产生溢出
- # 求中位数的函数
- def median(x):
- length = len(x) # 获取这组数据的长度
- x.sort() # 对这组数据进行排序
- if (length % 2)== 1: # 如果长度为奇数,则取中间的数
- z=length // 2
- y = x[z]
- else:
- y = (x[length//2]+x[length//2-1])/2 # 否则,取中间两个数的平均数
- return y
- # 用于存放结果的字典
- result = {}
- # 打开文件
- with open('data.txt') as f:
- for l in f:
- k, v = l.split() # 以空白分开分组 和 数字
- k = k[:k.index('_')] # 分组信息 _ 前的值
- v = Decimal(v) # 将字符串转化为小数
- if k in result: # 如果列表中存在这组数据,直接添加数据
- result[k].append(v)
- else:
- result[k] = []
- result[k].append(v) # 否则为这组数据建一个新列表,并添加数据
- # 对列表里面的分组求中位数并输出
- for k, v in result.items():
- print(f"{k}\t\t{median(v)}")
复制代码 |
|