【问题标题】:Sort tuples by averages of second element按第二个元素的平均值对元组进行排序
【发布时间】:2015-06-16 13:01:13
【问题描述】:

我已经能够使用函数将 csv 文件转换为列表格式。这样做时,我能够为班级编号分配一个名称,然后是 3 个附加编号,例如:

在 csv 文件中:

Hussain     1   7   8   0
Alexandra   1   0   0   2

成为:

['Alexandra', 2],['Hussain', 8]

由于排序方法要求按字母顺序排列姓名和该人的最高分。我使用元组完成了上面的代码,并想继续使用元组。 现在我希望能够对其进行排序,使其从最高平均值变为最低,例如,平均值的排序方法将导致:

[Hussain, 1.66666666667],[Alexandra, 0.6666666666]

这些数字是我所期望的,因为它们是 csv 文件中最后三个数字的平均值,因为此处忽略了第二列。由于侯赛因的平均成绩最高,因此他排在第一位。我会很感激任何可能的帮助。

我想做的事情如下:

我希望能够按平均数从高到低的顺序打印出所有学生。由于 Hussain 的平均值较高,为 1.6,因此他首先被打印出来,然后 Alexandra 被打印出来,因为她的平均值较低。这两个学生来自同一个班级(在 csv 文件的第二列中显示),当用户选择要排序的班级 1 时将打印出来。

TIA

【问题讨论】:

  • 你想要什么?只需要从最高平均值排序到最低值?需要你想要的输入和输出样本
  • 是的,没错,我想对用户选择的类进行排序。选择的班级需要从最高平均数到最低平均数进行排序。样本将是第 1 类中的 Hussain 和 Alexandra。因此,当用户选择第 1 类时,它将仅按该类中的最高到最低平均值排序。希望这更有意义。

标签: sorting csv python-3.x


【解决方案1】:

假设您有一个 1 类列表,例如:

class1 = [['Alexandra', 1, 0, 0, 2], ['Hussain', 1, 7, 8, 0]]

然后您根据列表列表中的第二个元素对其进行排序

##this is class number 1 and you find class 1 people in second index of list by i[1] == 1(class number)
avg_list = [[i[0], float(sum(i[2:]))/len(i[2:])] for i in class1 if i[1] == 1 ]
dd = sorted(avg_list, key=lambda x: x[1])
dd.reverse()
print dd

输出:

[['Hussain', 5.0], ['Alexandra', 0.6666666666666666]]

【讨论】:

  • 问题是我需要先从我拥有的元组中获取平均值。两个学生的元组看起来像这样:[Hussain, 1, 7, 8, 0],[Alexandra, 1, 0, 0, 2] 但我需要最后三个值来取平均值,然后从最高到排序最低平均值。
  • 你想在输出中显示什么?这种类型 [Hussain, 1, 7, 8, 0],[Alexandra, 1, 0, 0, 2] 或这种类型 ['Hussain', 1.66666666667], ['Alexandra', 0.6666666666
  • @Hussain- 喜欢这个答案吗?
  • 我希望输出为 ['Hussain', 1.66666666667], ['Alexandra', 0.6666666666],我会尝试上面的代码并向您报告结果
  • 基本上,使用的名称还有很多,Hussain 和 Alexandra 属于 1 类,但还有其他人属于 2 类和 3 类。用户将选择其中一个类。然后需要按照从最高平均到最低的顺序对选择的类进行排序。输出应该类似于 ['Hussain', 1.66666666667], ['Alexandra', 0.6666666666] 示例。
【解决方案2】:

在python的排序函数中使用key函数。在这里阅读: https://docs.python.org/3/howto/sorting.html

【讨论】:

    猜你喜欢
    • 2019-11-25
    • 2012-03-08
    • 1970-01-01
    • 2012-03-13
    • 2022-08-18
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多