首页 > 解决方案 > 排序列表python

问题描述

我需要对以下列表进行排序:

[('Elijah', 51), ('Chloe', 144), ('Elizabeth', 485), ('Matthew', 485), ('Natalie', 207), ('Jayden', 390)]

它应该根据编号进行排序。如果有任何两个相似的 no,则根据名称按字母顺序排序。最后的答案应该是

[('Elizabeth', 485), ('Matthew', 485), ('Jayden', 390), ('Natalie', 207), ('Chloe', 144), ('Elijah', 51)].

我无法理解作者给出的方法。他写了:

scores.sort(key=lambda x: (-x[1],x[0]))
print(scores)

在此分数中,请参阅上面给出的列表。谁能解释一下到底发生了什么。

标签: pythonpython-3.x

解决方案


分解:

列表排序

scores.sort(...) # sorts the list in-place

此方法对列表进行就地排序,仅使用项目之间的 < 比较。异常不会被抑制 - 如果任何比较操作失败,整个排序操作将失败(并且列表可能会处于部分修改状态)。

key排序参数:

key=... # sort the list by some function applied to each item

key 指定一个参数的函数,用于从每个列表元素中提取比较键(例如,key=str.lower)。列表中每一项对应的键计算一次,然后用于整个排序过程。默认值 None 表示列表项直接排序,不计算单独的键值。

关键功能:

lambda x: (-x[1],x[0]) # sort each item by the second and then first member

否定 ( -x[1]) 只是为了使列表以与第一项(从大到小)相关的相反方式排序。

根据预期的输出,使用reversed参数可能更清楚:

reverse 是一个布尔值。如果设置为 True,则对列表元素进行排序,就好像每次比较都颠倒了一样。


推荐阅读