人生苦短,我用python

还在苦苦花二三十行代码死记硬背快排吗,今天突然发现了一行代码解决这个面试典中典的问题,总结一下,那就是借助python的几个特性


# 1.列表生成器,形如下面这个样子
[fun1(i) for i in L if fun2(i)]
# 2.列表可加机制,形如下面这个样子
A = [1,2,3] + [4,5,6] + [7,8,9]
# 3.切片规则,形如下面这个样子
A = A[1:]
A = A[:-1]
A = A[a:b]
# 于是我们就得到了我们的函数
def quicksort(L):
    return quicksort([i for i in L[1:] if i<L[0]]) + [L[0]] + quicksort([i for i in L[1:] if i>=L[0]]) if L else []

是的,当我发现了之后,去网上一搜,果然已经被人们发现了,既生瑜何生亮啊,恨呐
起源是来源于erlang的的列表生成式,以及通过[H|T]直接解构传入的列表参数,也能达到一行实现快排,不过需要设计两次函数的匹配模式,转念一想,Python不也能搞吗?!!
不过对于快排,一趟划分也是这个算法的优点之一,像上面这么写就完全体现不出快排应有的内容了,面试还是老老实实写完整吧

最后修改:2023 年 06 月 01 日
来过的证明就是打钱