所以我有一个2d列表,我想从本质上将该列表分成2x2的分量,并获取它们的平均值,然后将它们“覆盖”我的上一个列表。假设我的输入将始终是一个正方形(所以#行=#列) 这是一个示例:
输入:
[[1,2,3],
[4,5,6],
[7,8,9]]
现在想象一下,我将它们分成了两个2x2子列表,如下所示:
[[1,2,4,5],[3,6],[7,8],[9]]
我现在要从这里开始的操作是每个子列表的平均值,并将其写成这样(因此这应该是我的输出):
[[3, 4],
[7, 9]]
(如果我的平均值是浮动的,那么我就四舍五入)。
我遇到的主要问题是我的输出是这样的:
[[3],[4],[7],[9]]
从本质上讲,这几乎就像我.removing
一样-每个2x2正方形(或者在某些情况下,如从我的示例中看到的那样小于2x2),然后将其替换为该2x2的平均值。
这是我的代码:
divided_matrix = get_2x2(original_matrix) #assume that this is the the list with the "2x2" sublists
new_list = []
for r in range(len(divided_matrix)):
addded = 0
for c in range(len(divided_matrix[r])):
summation += divided_matrix[r][c]
new_list.append([added//len(divided_matrix[r])])
return new_list
我尝试在某个地方使用.pop
,但是这给了我索引超出范围的错误,因为每当我弹出某些内容时,列表大小就会变短,因此我无法使用len()和range()
答案 0 :(得分:0)
您可以按照以下方式进行操作-假设您知道原始数组的大小:
divided_matrix = [[1, 2, 4, 5], [3, 6], [7, 8], [9]]
size = 2 # 2x2
l, fin = [], []
for arr in divided_matrix:
l.append(int(sum(arr) / len(arr)))
if len(l) == size:
fin.append(l)
l = []
print(fin)
输出:
[[3, 4], [7, 9]]