|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
data.txt
- alignment0_0 1.39753
- alignment0_10 2.57943
- alignment0_1 1.64152
- alignment0_2 2.29407
- alignment0_3 1.67177
- alignment0_4 1.73668
- alignment0_5 2.26327
- alignment0_6 1.61733
- alignment0_7 2.12426
- alignment0_8 2.98343
- alignment0_9 1.91121
- alignment100_0 2.50661
- alignment100_1 1.87285
- alignment100_2 2.05305
- alignment100_3 2.47067
- alignment100_4 2.31269
- alignment100_5 1.44079
- alignment10_0 3.51212
- alignment101_0 1.60506
- alignment101_1 1.60162
- alignment101_2 1.88725
- alignment101_3 4.86661
- alignment101_4 2.57267
- alignment101_5 2.71156
- alignment10_1 1.83633
- alignment102_0 2.09128
- alignment102_10 2.30949
- alignment102_1 4.45056
- alignment102_2 2.10367
- alignment102_3 1.07434
- alignment102_4 4.26704
- alignment102_5 1.93322
- alignment102_6 3.76588
- alignment102_7 1.70572
- alignment102_8 1.9907
- alignment10_3 1.69395
- alignment10_4 4.34806
- alignment10_5 2.09423
复制代码
如果第一列下划线'_'前面的值相同,则归为一组数据,对第二列的值计算中位数
(先对每组数据排序,组内数据的个数为奇数,则中位数为最中间的数字,偶数为中间两个数值的均值)
比如以下下划线前面都是alignment0,则归为一组。对应的第二列求中位数。
alignment0_0 1.39753
alignment0_10 2.57943
alignment0_1 1.64152
alignment0_2 2.29407
alignment0_3 1.67177
alignment0_4 1.73668
alignment0_5 2.26327
alignment0_6 1.61733
alignment0_7 2.12426
alignment0_8 2.98343
alignment0_9 1.91121
输出文件为下划线前面的数值和中位数:
比如:
alignment0 1.91121
本帖最后由 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)}")
复制代码
|
|