我正在解决一个挑战,并有以下学生得分列表:
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/