我正在尝试对元组列表进行排序.
例如,如果
>>>recommendations = [('Gloria Pritchett', 2), ('Manny Delgado', 1), ('Cameron Tucker', 1), ('Luke Dunphy', 3)]
我想得到
Luke Dunphy
Gloria Pritchett
Cameron Tucker
Manny Delgado
这是我所做的:
这段代码只给我
>>> [('Luke Dunphy', 3), ('Gloria Pritchett', 2), ('Cameron Tucker', 1), ('Manny Delgado', 1)]
我不知道如何在sorted_list中仅添加名称(字符串).请帮忙!
解决方法:
首先,听起来您想这样做:
给定(名称,分数)元组的列表,返回名称列表
从最高分到最低分
那正确吗?我要假设这就是问题.
而不是进入您的代码(当我运行它时,它仅返回(名称,得分)对中的一对),而是向您展示如何执行.
首先在单独的步骤中:
recommendations = [
('Gloria Pritchett', 2),
('Manny Delgado', 1),
('Cameron Tucker', 1),
('Luke Dunphy', 3)]
rec2 = [(age, name) for name, age in recommendations]
print rec2
rec3 = sorted(rec2, reverse=True)
print rec3
rec4 = [name for age, name in rec3]
print rec4
这将打印:
[(2, 'Gloria Pritchett'), (1, 'Manny Delgado'), (1, 'Cameron Tucker'), (3, 'Luke Dunphy')]
[(3, 'Luke Dunphy'), (2, 'Gloria Pritchett'), (1, 'Manny Delgado'), (1, 'Cameron Tucker')]
['Luke Dunphy', 'Gloria Pritchett', 'Manny Delgado', 'Cameron Tucker']
那是您要找的东西吗?在我的情况下,“ Manny”在“ Cameron”之前排在前面(与您打算的答案不同),但是如果他们得到相同的分数,我希望这对您来说无关紧要. (如果有,请澄清您的问题)
像我这样的旧计时器可能会将其称为Schwartzian transform的变体.(我想我在Perl的根源正在显示…)
无论如何,这是它的工作方式:
rec2是“列表理解”,其中分数和名称已交换.
rec3使用Python的内置功能对元组进行排序,但是使用reversed = True进行从高到低的排序.
rec4是另一个“列表理解”,用于删除分数并返回名称.
如果需要,可以将所有内容放在一个语句中:
class_rank = [name for age, name in sorted([(age, name) for name, age in recommendations], reverse=True)]
print class_rank
如果需要,欢迎您将其启用.
干杯!