Python - 在嵌套列表中添加相同索引的元素,然后计算平均值

问题描述 投票:0回答:1

我有一个清单如下: [[0, 5, -3, 5, 0, 0], [-3, 0, 1, 0, 5, 0], [1, 0, 5, 0, -5, 0], [-3, 0, 3, 0, 0, 5]]

我需要计算共享相同索引的元素的总和和平均值,然后将结果添加到新列表中。例如,这些内部列表的索引 0 的项目将被添加到一起: 0 + (-3) + 1 + (-3) = -5 然后将总和除以数字个数(不包括 0)以获得平均值: 平均值 = -5/3 = -1.66666667 最后,它将被添加到新列表中。

我预计结果会是这样的 [-1.66667, 5.0, 1.5, 5.0, 0.0, 5]。我试过这个:

for i in range(0, len(rating_values)):
    for j in range(0, len(rating_values[i])):
        total = 0
        count = 0
        if rating_values[i][j] != 0:
            total += rating_values[i][j]
            count += 1
        average_rating = total / count if count > 0 else 0
        average_list.append(average_rating)

但是我得到了这个:[0, 5.0, -3.0, 5.0, 0, 0, -3.0, 0, 1.0, 0, 5.0, 0, 1.0, 0, 5.0, 0, -5.0, 0, -3.0, 0 , 3.0, 0, 0, 5.0] 有没有一种方法可以让我仅在 Python 中循环访问相同索引的项目(对于那些内部列表)?

python list loops
1个回答
1
投票

你好!稍加修改,就可以实现。您应该首先遍历各列。然后,浏览每一列的行。正如我所看到的,您还将 sum 和 count 变量放置在内部循环中,这导致它们在每一行中重置,并将平均值附加到内部循环中,从而导致每个索引有多个条目。

rating_values = [[0, 5, -3, 5, 0, 0], [-3, 0, 1, 0, 5, 0], [1, 0, 5, 0, -5, 0], [-3, 0, 3, 0, 0, 5]]
average_list = []

# Loop through each index
for j in range(len(rating_values[0])):  # Assumes all sublists are of equal length
    total = 0
    count = 0
    # Loop through each list for the current index
    for i in range(len(rating_values)):
        if rating_values[i][j] != 0:
            total += rating_values[i][j]
            count += 1
    # Compute the average; if count is 0, average is set to 0
    average_rating = total / count if count > 0 else 0
    average_list.append(round(average_rating, 5))  # rounding to 5 decimal places

print(average_list)
© www.soinside.com 2019 - 2024. All rights reserved.