python - 排序列表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)
在此分数中,请参阅上面给出的列表。谁能解释一下到底发生了什么。
解决方案
分解:
列表排序:
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,则对列表元素进行排序,就好像每次比较都颠倒了一样。
推荐阅读
- javascript - 如何在 Mustache 模板中调用 JavaScript 函数
- string - 如何修复mapreduce中mapper的设置方法给出的字符串值的不规则行为?
- visual-studio-code - VSCode:CMD + 单击转到定义返回“无法打开'文件名':找不到文件”错误
- json - 将一个 JSON 转换为另一个 w/circe
- bash - 将 exec 与 & 一起使用时,最终命令不会运行
- python-3.x - 如何修复附加函数中的 NoneType 错误
- python - PyCharm 无法识别我的 python 解释器和 PIP 包。也许是路径问题?
- mysql - 在 2 个实例之间共享文件
- regex - 使用正则表达式在 URL 中找不到大写字母
- r - 从数字到R中的格式化日期时间