上文的 Python 实现还是稍显啰嗦,未能充分发挥 Python 语言的优势,以及“Python——一种可执行的伪代码”的论断。本文介绍一种更为简洁的归并排序的实现:
def mergesort(l):
m = len(l)//2
lft, rgt = l[:m], l[m:]
if len(lft) > 1: lft = mergesort(lft)
if len(rgt) > 1: rgt = mergesort(rgt)
res = []
while lft and rgt:
res.append(lft.pop()) if lft[-1] > rgt[-1] else res.append(rgt.pop())
res.reverse()
return (lft or rgt) + res
简单的 if else 双分支都是可以转换为更为简洁的三目运算符的,
while lft and rgt:
res.append(lft.pop()) if lft[-1] > rgt[-1] else res.append(rgt.pop())
即是对如下代码的转换:
while lft and rgt:
if lft[-1] > rgt[-1]:
res.append(lft.pop())
# 无参的 pop() ,从尾部弹出元素
else:
res.append(rgt.pop())
更多 Python 三目运算符的用法,请见 Python中的三目运算符