Python如何按每行正偶数元素之和对二维列表的行进行排序
代码错误原因与修正方案
原有代码核心问题
findCharacteristicNumber函数计算完每行的特征和后没有使用return返回结果,调用该函数只能得到None,无法作为排序依据task函数中错误地循环调用sort方法,且sort的key参数要求传入「接收单个行元素为输入的函数」,而不是直接传入计算好的数值,无需手动遍历所有行
推荐实现方式
我们可以直接针对单一行计算特征和,不需要额外传入矩阵、行号、列数等冗余参数,代码更简洁易读:
def calc_row_score(row): # 计算当前行所有大于0的偶数之和 return sum(num for num in row if num > 0 and num % 2 == 0) def sort_matrix(matrix): # 按行特征和降序排序,sort方法直接修改原矩阵 matrix.sort(key=calc_row_score, reverse=True) return matrix
使用示例
# 测试输入 test_matrix = [ [3, 2, -4, 6], [1, -2, 5, 8], [2, 2, 2, -1] ] # 调用排序 sorted_matrix = sort_matrix(test_matrix) print(sorted_matrix) # 输出:[[3, 2, -4, 6], [1, -2, 5, 8], [2, 2, 2, -1]] # 对应行得分分别为8、8、6,得分相同的行保持原有相对顺序
额外说明
如果需要保留原矩阵不被修改,可以使用sorted函数生成新的排序后矩阵:
sorted_matrix = sorted(original_matrix, key=calc_row_score, reverse=True)
内容的提问来源于stack exchange,提问作者Pavel
相关产品推荐
相关产品推荐

