Python:包含元组的排序列表

标签 python list sorting tuples

我仍在学习 Python,我已经尝试解决这个问题好几个小时了,但不知何故无法让它工作: 假设我们有一个包含姓名和成绩的元组列表:

[("Mark", [5,4,1,2,4,3]), ("John", [1,2,3,1,2,1]), ("Patrick", [1,3,5,1,2,4])]

我们想要得到这个输出:

[("John", [1,2,3,1,2,1]), ("Patrick", [1,3,5,1,2,4]), ("Mark", [5,4,1,2,4,3])]

,其中原始列表按学生的ma​​rks score升序排序(假设我们通过丢弃最高分并将所有剩余分数加在一起得到ma​​rks score ). IE。 John 有标记 1,2,3,1,2,1,所以我们舍弃标记 3 并将 1+2+1+2+1 加在一起,得到 7。

如果我不需要获得带有所有原始标记的输出,这个任务根本不会有问题。我写了这个函数:

def sortedFinalRes(input):
finalRes = 0
sortedRes = []
b = []
for i in range(0, len(input)):
    total = 0
    a = sorted(input[i][1], key = lambda x: x)
    a.pop()
    sortedRes += input[i][0], a
    total = sum(sortedRes[i*2+1])
    b += (sortedRes[i*2], total)
    c = sorted(b, key = lambda x: str(x))
print(sortedRes)
print(b)

,我基本上首先对每个学生的分数进行排序,这样我就可以使用 pop() 丢弃最高的分数,然后我将所有剩余的分数相加,得到分数。然后我按照marks score排序,但是输出要求是排序的,但是要带original marks,不能带mark score。 任何想法表示赞赏!干杯

最佳答案

我们可以这样定义一个评分函数:

def score(x): sum(x) - max(x)       

这通过将分数相加并剔除最高分数来计算您所谓的“分数”。然后我们将它用作排序的键,确保给它元组的第二个元素:

In [4]: sorted(d, key=lambda x: score(x[1]))                                                                                                                 
Out[4]: 
[('John', [1, 2, 3, 1, 2, 1]),
 ('Patrick', [1, 3, 5, 1, 2, 4]),
 ('Mark', [5, 4, 1, 2, 4, 3])]

关于Python:包含元组的排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27365034/

相关文章:

python - "Best"基于两个条件从列表中检索项目的 pythonic 方式

python - 对 python 列表中的午餐项目进行排序

C 用双向链表交换

perl - 是否可以按照 key 的存储顺序遍历 perl 中的散列?

git - 为什么 Github 将大写字母排序而不是小写字母?

python - 遍历 JSON 对象

Python:Rar 暴力破解

python - py.test - 在不同目录中收集 2 个 conftest.py 时出错

javascript - send_keys() 的替代方案 - selenium python

list - 普通口齿不清 : all or any elements are true in a list