根据列表中的两个元素计算列表列表的平均值?
Posted
技术标签:
【中文标题】根据列表中的两个元素计算列表列表的平均值?【英文标题】:Calculate the average of list of lists based on two elements in the list? 【发布时间】:2021-09-29 17:11:00 【问题描述】:我有以下清单:
mylist: [[(5, 1, 11), (5, 2, 13), (5, 3, 26),
(3, 1, 60), (3, 2, 40), (3, 3, 70),
(6, 1, 30), (6, 2, 80), (2, 3, 80)],
[(5, 1, 7), (5, 2, 8), (5, 3, 6),
(3, 1, 50), (3, 2, 44), (3, 3, 44),
(6, 1, 20), (6, 2, 40), (2, 3, 50)],
[(5, 1, 22), (5, 2, 18), (5, 3, 60),
(3, 1, 10), (3, 2, 20), (3, 3, 30),
(6, 1, 60), (6, 2, 20), (2, 3, 30)]]
我想计算具有相同“第一和第二元素”的项目的平均值。例如,从下面的示例中,我想取列表前两个元素中具有“5”和“1”的元素的平均值。所以,我想要的输出应该是这样的:
output: [(5, 1, 13.3), (5, 2, 25.6), (5, 3, 30.6),
(3, 1, 40), (3, 2, 34.6), (3, 3, 48),
(6, 1, 36.6), (6, 2, 46.6), (6, 3, 56.6)]
如果列表中只有两个项目,例如:
mylist: [[(1, 11), ( 2, 13), ( 3, 26),
[( 1, 60), ( 2, 40), ( 3, 70)],...]
我可以通过以下代码轻松计算平均值:
np.mean(mylist, axis=0)
【问题讨论】:
好。所以计算一下。你在哪里面临prblm? 元素在列表中的位置是否始终相同?例如。 (5,1,_) 总是第一个元素 例如(3, 3, 48)
中的5或1在哪里?问题不清楚,您也没有尝试自己解决。投票关闭它。
【参考方案1】:
见下文
from collections import defaultdict
lst = [[(5, 1, 11), (5, 2, 13), (5, 3, 26),
(3, 1, 60), (3, 2, 40), (3, 3, 70),
(6, 1, 30), (6, 2, 80), (2, 3, 80)],
[(5, 1, 7), (5, 2, 8), (5, 3, 6),
(3, 1, 50), (3, 2, 44), (3, 3, 44),
(6, 1, 20), (6, 2, 40), (2, 3, 50)],
[(5, 1, 22), (5, 2, 18), (5, 3, 60),
(3, 1, 10), (3, 2, 20), (3, 3, 30),
(6, 1, 60), (6, 2, 20), (2, 3, 30)]]
data = defaultdict(list)
for ex_entry in lst:
for in_entry in ex_entry:
data[(in_entry[0], in_entry[1])].append(in_entry[2])
for key, value in data.items():
print(f'key -> sum(value) / len(value)')
输出
(5, 1) -> 13.333333333333334
(5, 2) -> 13.0
(5, 3) -> 30.666666666666668
(3, 1) -> 40.0
(3, 2) -> 34.666666666666664
(3, 3) -> 48.0
(6, 1) -> 36.666666666666664
(6, 2) -> 46.666666666666664
(2, 3) -> 53.333333333333336
【讨论】:
是的,它有效。肿瘤坏死因子。看来我自己的代码 (np.mean(mylist, axis=0)) 也有效:以上是关于根据列表中的两个元素计算列表列表的平均值?的主要内容,如果未能解决你的问题,请参考以下文章
Python:计算具有不同长度的列表列表中第 n 个元素的平均值