如何在二维列表中按n行n列分块计算均值生成新列表?
二维列表n×n分块均值计算方案
实现代码
original_list = [ [1,1,1,2,2,2,3,3,3], [4,4,4,5,5,5,6,6,6], [7,7,7,8,8,8,9,9,9], [0,0,0,1,1,1,2,2,2], [3,3,3,4,4,4,5,5,5], [6,6,6,7,7,7,8,8,8] ] n = 3 # 计算总行数、总列数,确定分块数量 total_rows = len(original_list) total_cols = len(original_list[0]) row_blocks = total_rows // n col_blocks = total_cols // n result = [] # 遍历每个行块 for i in range(row_blocks): current_row = [] # 遍历每个列块 for j in range(col_blocks): # 提取当前n×n的分块 block = [row[j*n : (j+1)*n] for row in original_list[i*n : (i+1)*n]] # 计算分块内所有元素的总和 total = sum(sum(sub_row) for sub_row in block) # 计算均值(整数除法,符合示例结果要求) mean = total // (n * n) current_row.append(mean) result.append(current_row) print(result) # 输出: [[4, 5, 6], [3, 4, 5]]
核心步骤说明
- 分块划分:通过总行数/列数除以n,确定行、列方向的分块数量(示例中6行分2块,9列分3块)
- 切片提取分块:用列表切片
original_list[i*n : (i+1)*n]提取行块,再对每行做列切片得到n×n的完整分块 - 均值计算:先嵌套求和得到分块内所有元素的总和,再除以n²(分块总元素数)得到均值,这里用整数除法匹配示例的整数结果
如果需要处理行数/列数不能被n整除的场景,可以在循环中加入边界判断,对剩余不足n行/列的部分单独处理。
内容的提问来源于stack exchange,提问作者Bart008
相关产品推荐
相关产品推荐

