gpt4 book ai didi

python - 嵌套列表python中的求和值

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:38 25 4
gpt4 key购买 nike

我有一个列表:

l = [['a', 10, 30], ['b', 34, 89], ['c', 40, 60],['d',30,20]]

每个子列表中的第一项是名称,其他两个数字是标记(sub1 和 sub2)

嵌套列表可以是动态的,即嵌套列表的数量可以根据功能而变化。

我要找的就是找到

average of subj 1 i.e (10+34+40+30)/4 and 
similarly sub2 (30+89+60+20)/4

also average marks of a: (10+30)/2
average marks of b: (34+89)/2 and so on.

我试过:

c = 0
for i in range(0,len(list_marks1)):
c += list_marks1[i][1]
sub_1avg = float(c)/len(list_marks1)
d = 0
for i in range(0,len(list_marks1)):
d += list_marks1[i][2]
sub_2avg = float(d)/len(list_marks1)

但这是不正确的。

有什么最佳方法可以做到这一点吗?由于我的嵌套列表中的主题数量也可能发生变化。

最佳答案

你可以只使用 sum 和一个生成器表达式:

>>> l= [['a', 10, 30], ['b', 34, 89], ['c', 40, 60],['d',30,20]]
>>> length = float(len(l)) # in Python 3 you don't need the "float"
>>> sum(subl[1] for subl in l) / length
28.5
>>> sum(subl[2] for subl in l) / length
49.75

或者甚至在列表理解中这样做:

>>> [sum(subl[subj] for subl in l) / length for subj in range(1, 3)]
[28.5, 49.75]

同样对于一个子列表的平均值:

>>> length = float(len(l[0])) - 1
>>> [sum(subl[1:]) / length for subl in l]
[20.0, 61.5, 50.0, 25.0]

当你有 python 3.4 或更新版本时,你可以将 sum/length 替换为 statistics.mean :

>>> from statistics import mean
>>> [mean(subl[subj] for subl in l) for subj in range(1, 3)]
[28.5, 49.75]

>>> [mean(subl[1:]) for subl in l]
[20, 61.5, 50, 25]

您询问了最佳方法,所以我可能应该提到有专用于表格数据的包。例如,如果你有 pandas,使用 DataFramemean 会更容易:

>>> import pandas as pd

>>> df = pd.DataFrame(l, columns=['name', 'x', 'y'])
>>> df[['x', 'y']].mean(axis=0)
x 28.50
y 49.75
dtype: float64

>>> df[['x', 'y']].mean(axis=1)
0 20.0
1 61.5
2 50.0
3 25.0
dtype: float64

关于python - 嵌套列表python中的求和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44302799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com