如何获得2d列表的平均值并从中创建另一个2d列表

时间:2019-10-28 01:47:47

标签: python python-3.x

所以我有一个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()

1 个答案:

答案 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]]