如何对数组的行与列平均值进行排序?附行/列平均值计算需求
计算二维列表的行/列平均值及排序实现
行平均值计算
遍历每个子列表,对单个子列表求和后除以元素个数即可得到该行的平均值,用列表推导式可快速实现:
data = [[126, 91, 43], [534, 59, 148], [53, 78, 1], [725, 727, 729], [0, 12, 0], [64, 23, 3]] # 计算每行的平均值 row_averages = [sum(row) / len(row) for row in data] print("行平均值:", row_averages) # 输出:行平均值: [86.66666666666667, 247.0, 44.0, 727.0, 4.0, 30.0]
列平均值计算
利用zip(*data)将原二维列表转置(行变列),之后对转置后的每个"列集合"计算平均值:
# 计算每列的平均值 col_averages = [sum(col) / len(col) for col in zip(*data)] print("列平均值:", col_averages) # 输出:列平均值: [250.33333333333334, 165.0, 187.33333333333334]
排序操作
直接使用Python内置的sorted()函数即可对行/列平均值进行排序,默认升序,添加reverse=True参数可改为降序:
基础排序
# 行平均值升序排序 sorted_rows_asc = sorted(row_averages) # 行平均值降序排序 sorted_rows_desc = sorted(row_averages, reverse=True) # 列平均值升序排序 sorted_cols_asc = sorted(col_averages) # 列平均值降序排序 sorted_cols_desc = sorted(col_averages, reverse=True) print("行平均值升序:", sorted_rows_asc) # 输出:行平均值升序: [4.0, 30.0, 44.0, 86.66666666666667, 247.0, 727.0] print("行平均值降序:", sorted_rows_desc) # 输出:行平均值降序: [727.0, 247.0, 86.66666666666667, 44.0, 30.0, 4.0] print("列平均值升序:", sorted_cols_asc) # 输出:列平均值升序: [165.0, 187.33333333333334, 250.33333333333334] print("列平均值降序:", sorted_cols_desc) # 输出:列平均值降序: [250.33333333333334, 187.33333333333334, 165.0]
带原索引的排序
如果需要知道排序后的平均值对应原数据的哪一行/列,可以结合enumerate()和自定义排序键:
# 带原行索引的行平均值排序(按平均值升序) sorted_rows_with_index = sorted(enumerate(row_averages), key=lambda x: x[1]) print("带索引的行平均值升序:", sorted_rows_with_index) # 输出:带索引的行平均值升序: [(4, 4.0), (5, 30.0), (2, 44.0), (0, 86.66666666666667), (1, 247.0), (3, 727.0)] # 带原列索引的列平均值排序(按平均值降序) sorted_cols_with_index = sorted(enumerate(col_averages), key=lambda x: x[1], reverse=True) print("带索引的列平均值降序:", sorted_cols_with_index) # 输出:带索引的列平均值降序: [(0, 250.33333333333334), (2, 187.33333333333334), (1, 165.0)]
内容的提问来源于stack exchange,提问作者L4w1i3t
相关产品推荐
相关产品推荐

