Skip to main content
 首页 » 编程设计

Python:包含元组的排序列表

2025年05月04日9zhwl

我仍在学习 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])]