page contents

面试让你手写排序怎么办?记住这3种Pythonic写法,比背算法模板更有用

面试官让你手写排序算法,很多人第一反应是背快排模板。背模板这事吧,十个人有八个会卡在递归边界上,写出来也不像自己的东西。不如换个思路,用Python里几个好用的特性,让排序代码既短又清楚。

attachments-2026-06-Qiy8bxmF6a3b3530c8c3e.png面试官让你手写排序算法,很多人第一反应是背快排模板。背模板这事吧,十个人有八个会卡在递归边界上,写出来也不像自己的东西。不如换个思路,用Python里几个好用的特性,让排序代码既短又清楚。

先说说最简单的场景。给你一个列表,里面全是数字,要求从小到大排。新手会写两层循环冒泡,老手直接就调 sorted() 了。但面试官要看你的思路,不是看你会不会调库。这时候你可以写一个 装饰器模式 的排序包装。比如这样:

def sorted_wrapper(func):
    def wrapper(lst):
        return sorted(func(lst))
    return wrapper

然后你用 @sorted_wrapper 装饰一个生成器函数,比如 @sorted_wrapper def data(): 后面 yield 数据。这招面试官看了会觉得你理解了一个关键点:排序不只发生在列表上,任何可迭代对象都能排。代码也整洁,不用背边界条件。

第二种情况更常见。列表里有字典或者对象,要按某个字段排序。很多人会写 lambda,但 lambda 如果里面逻辑一多就变天书。用 operator.attrgetter 或 operator.itemgetter 会更直白。比方说:

from operator import itemgetter
students = [{'name': '张三', 'score': 88}, {'name': '李四', 'score': 95}]
sorted(students, key=itemgetter('score'), reverse=True)

你看,一行搞定。面试官问你这行代码的意思,你可以说“按score字段降序排,itemgetter比lambda更高效,也更好读”。实际开发中,这种写法让团队其他人一看就懂,不用解析那个冒号后面的一大串。面试官要的就是你这种“写给别人看”的意识。

第三种是处理特殊情况。比如两个字段排序,先按分数排,分数一样按年龄排。传统写法是把元组放在 key 里:sorted(list, key=lambda x: (x['score'], x['age']))。很常规。但有更 Pythonic 的写法。如果排序字段比较多,可以用 functools.cmp_to_key 写一个比较函数。很多人说 cmp_to_key 是旧时代的产物,实际上在需要复杂比较逻辑时它非常好用。

举个真实例子。有个列表是员工信息,要求按部门分组,部门内按工号排。你可以先按工号排序,再分组。但这样效率低。换成 cmp_to_key 写一个比较器,把部门作为主要比较依据,工号作为次要依据。代码会多几行,但逻辑清楚。面试官看的是你愿不愿意为了可读性多写两行。

这三种写法背后就一个核心原则:排序的逻辑应该和数据本身的逻辑分开。sorted 和 list.sort 是工具,key 参数是规则。不要只背快排的模板,那玩意面试完了你就忘。把 Python 自带的排序工具用熟练,每次写排序都是调优的机会。

最后讲个坑。很多人写排序喜欢用 list.sort,注意这个方法是原地排序,返回 None。如果你在表达式里连用会出大问题。比如 a = b.sort() 然后 a 是 None,你排查半天发现变量没了。新人经常掉这个坑。养成习惯,需要新列表就用 sorted,需要改原列表就用 sort,不要混。

下次面试再让你手写排序,试试用这些写法。面试官多半会眼前一亮,觉得你不仅是写代码,而是理解 Python 的设计思路。

  更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2026-06-24 09:39
  • 阅读 ( 27 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

2179 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 2179 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章