【问题标题】:Calculate the average of some elements in sublists计算子列表中某些元素的平均值
【发布时间】:2015-07-15 14:22:44
【问题描述】:

我正在尝试查找嵌套列表中某些元素的平均值。

data=[['Alan', 8, 4, 5], ['Jog', 10, 1, 2], ['Rhys', 7, 8, 8], ['Sam', 7, 8, 9], ['Tom', 5, 6, 9], ['Tommo', 5, 4, 6]]

我需要计算每个子列表中数字的平均值,并按 Python 3 中计算的平均值的降序排列子列表。 如何输出带有名称及其旁边的平均值的列表? 我尝试了avg功能,但卡住了。

【问题讨论】:

  • 请输出示例?
  • avg 有什么功能?
  • [['Alan', 5], ['Jog', 4], ['Rhys', 7], ['Sam', 8], ['Tom', 6], [ 'Tommo', 5]] 但按降序排列,即 [['Sam', 8], ['Rhys', 7], ['Tom', 6], ['Alan', 5],['Tommo', 5],['慢跑', 4]]
  • 大概这是我们几个月来一直被淹没的 GCSE 课程 - 如果是这样,请注意问 这是作弊(尽管在你自己的情况下这样做是值得称赞的姓名)。这也是一个糟糕的 SO 问题 - 你的代码在哪里,它到底有什么问题?
  • 这是一个 GCSE 问题吗?

标签: python sorting python-3.x average sublist


【解决方案1】:

您可以使用列表推导和解包操作:

>>> [[name,sum(num)//3] for name,*num in data]
[['Alan', 5], ['Jog', 4], ['Rhys', 7], ['Sam', 8], ['Tom', 6], ['Tommo', 5]]

或者,如果您希望结果为浮点数,您可以使用 / 而不是 //

>>> [[name,sum(num)/3] for name,*num in data]
[['Alan', 5.666666666666667], ['Jog', 4.333333333333333], ['Rhys', 7.666666666666667], ['Sam', 8.0], ['Tom', 6.666666666666667], ['Tommo', 5.0]]

【讨论】:

  • 我建议 rounding 而不是 //ing - 7 和 7.66666666 是一个合理的差异,通常更倾向于向上取整。
【解决方案2】:
data=[['Alan', 8, 4, 5], ['Jog', 10, 1, 2], ['Rhys', 7, 8, 8], ['Sam', 7, 8, 9], ['Tom', 5, 6, 9], ['Tommo', 5, 4, 6]]
datam = []

for i in data:
    datam += [[i[0],sum(i[1:])/len(i[1:])]]

datam.sort(key=lambda x: x[1], reverse=True)

首先这找到数据的平均值,并将其添加到列表datam,以及名称。

然后它按第二项(索引 1,平均值)对其进行排序。它也反转它,从高到低。

打印出来如下:

[['Sam', 8.0], ['Rhys', 7.666666666666667], ['Tom', 6.666666666666667], ['Alan', 5.666666666666667], ['Tommo', 5.0], ['Jog', 4.333333333333333]]

【讨论】:

    猜你喜欢
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2018-03-19
    • 2018-06-21
    • 2013-06-07
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多