如何用Python计算同前缀相邻行的数值平均值?
用Python实现同前缀相邻行的平均值计算
核心思路是遍历文件行,将相邻的同前缀行归为一组,计算每组的数值平均值后输出,具体实现步骤与代码如下:
实现步骤
- 读取文件并解析每行数据,提取出前缀(下划线
_分隔第一列的前半部分)和对应的数值列表 - 将连续相邻的同前缀行自动分组
- 对每组数据计算各列数值的平均值,最后输出结果
完整代码实现
from itertools import groupby def extract_prefix(s): # 从第一列字符串中提取下划线前的前缀 return s.split('_')[0] # 读取目标文件(假设文件名为data.txt) with open('data.txt', 'r') as file: # 过滤空行并处理每行内容 processed_lines = [line.strip() for line in file if line.strip()] # 解析每行数据,格式为(前缀, 整数数值列表) parsed_data = [] for line in processed_lines: segments = line.split() prefix = extract_prefix(segments[0]) num_list = list(map(int, segments[1:])) parsed_data.append((prefix, num_list)) # 计算每组相邻同前缀行的平均值 output_lines = [] for prefix, group in groupby(parsed_data, key=lambda x: x[0]): group_items = list(group) row_count = len(group_items) # 按列聚合数值并求和 column_sums = [sum(col) for col in zip(*[nums for _, nums in group_items])] # 计算整数平均值(与示例输出的取整逻辑一致) avg_values = [total // row_count for total in column_sums] output_lines.append(f"{prefix} {' '.join(map(str, avg_values))}") # 打印最终结果 for line in output_lines: print(line)
代码说明
extract_prefix函数:专门处理第一列字符串,拆分并返回前缀部分itertools.groupby:自动将连续相同前缀的行归为一组,精准匹配“相邻同前缀”的需求- 数值计算:通过
zip(*...)将每组的数值按列聚合,求和后除以行数得到平均值,这里用整数除法//保证输出结果和示例一致
运行代码后,输出结果与需求示例完全一致:
apple 2 3 4 book 1 4 5 cook 3 5 6 book 2 3 4
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

