python - 测试嵌套列表中的相等性并将结果附加到另一个列表中?

标签 python

我正在解决一个挑战,并有以下学生得分列表:

arr = [['E', 21.0], ['A', 20.0], ['B', 20.0], ['C', 19.0], ['D', 19.0]]

我希望得分第二高的学生将他们的数据存储在第二个列表 fin_arr 中。如果只有一名学生,则仅存储该数据。这意味着上面的列表应该返回:

print(fin_arr)
[['A', 20.0],
 ['B', 20.0]]

我的解决方案有效,但仅适用于特定索引,其中可以假设在倒数第二个和倒数第三个索引中找到第二高分数(列表不得超过 5 个条目) 。但是如果列表是像上面这样的排序列表呢?我找到了几种评估列表的方法,但没有专门检查子索引内索引的相等性,并且我迷失在 IDE 的命令历史记录中。实现这一目标的最佳方法是什么?

最佳答案

您可以使用itertools.groupby:

arr = [['E', 21.0], ['A', 20.0], ['B', 20.0], ['C', 19.0], ['D', 19.0]]

from itertools import groupby
from pprint import pprint

arr = [[*g] for v, g in groupby(sorted(arr, key=lambda k: k[-1]), lambda k: k[-1])]

if len(arr) > 1:
    pprint(arr[1], width=20)
else:
    print([])

打印:

[['A', 20.0],
 ['B', 20.0]]

关于python - 测试嵌套列表中的相等性并将结果附加到另一个列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56954810/

相关文章:

python - 执行从 python gflags 到 yaml 和返回的转换的惯用方式是什么?

python - Django-South 自省(introspection)规则不起作用

python - 寻找训练模型所需的最低特征的问题

python - Dask Dataframe - 每行中的多行

python - 如果条件不满足则打印一行

python - 在 WTForms 中使用 HTML5 字段

python - 在 python3 中绝对导入,但找不到我的包

python - Pandas 数据框按列索引

python - 具有多个断点的可拖动线

python - 比较数据框中的 2 个连续单元格