LeetCode Sort the People问题:如何用单行无重复计算代码实现排序
一行代码实现按身高排序人员列表
这是LeetCode上的一道简单题,要求根据给定的身高对人员列表进行排序。比如输入:
- names = ["Mary","John","Emma"]
- heights = [180,165,170]
输出应为["Mary","Emma","John"]
你原本的代码已经解决了问题,不过确实可以用一行函数体实现,而且不会有重复代码或重复计算:
from typing import List def sortPeople(names: List[str], heights: List[int]) -> List[str]: return [name for _, name in sorted(zip(heights, names), reverse=True)]
解释:
zip(heights, names)将每个身高与对应的名字打包成元组(比如(180, "Mary")),这样身高和名字的对应关系被直接绑定,不需要额外字典存储。sorted(..., reverse=True)默认按元组的第一个元素(也就是身高)进行降序排序,省去了自定义key的写法,简洁高效。- 最后用列表推导式提取排序后每个元组里的名字即可,全程没有重复计算,逻辑清晰。
如果你更倾向于显式指定排序依据,也可以写成:
return [name for _, name in sorted(zip(heights, names), key=lambda x: -x[0])]
效果和上面完全一致,只是用负号实现降序排序。
内容的提问来源于stack exchange,提问作者Niles
相关产品推荐
相关产品推荐

