前言
Python 一直以来被大家所诟病的一点就是执行速度慢,但不可否认的是 Python 依然是我们学习和工作中的一大利器。因此,我们对 Python 呢是“又爱又恨”。
本文总结了一些小 tips 有助于提升 Python 执行速度、优化性能。以下所有技巧都经过我的验证,可放心食用💖。
正文
1.使用map()
进行函数映射
✅ Exp1:将字符串数组中的小写字母转为大写字母。
测试数组为 oldlist = ['life', 'is', 'short', 'i', 'choose', 'python']。
- 方法一
newlist = []
for word in oldlist:
newlist.append(word.upper())
- 方法二
list(map(str.upper, oldlist))
方法一耗时 0.5267724000000005s,方法二耗时 0.41462569999999843s,性能提升 21.29% 🚀
2.使用set()
求交集
✅ Exp2:求两个list
的交集。
测试数组:a = [1,2,3,4,5],b = [2,4,6,8,10]。
- 方法一
overlaps = []
for x in a:
for y in b:
if x == y:
overlaps.append(x)
- 方法二
list(set(a) & set(b))
方法一耗时 0.9507264000000006s,方法二耗时 0.6148200999999993s,性能提升 35.33% 🚀
关于set()
的语法:|
、&
、-
分别表示求并集、交集、差集。
3.使用sort()
或sorted()
排序
我们可以通过多种方式对序列进行排序,但其实自己编写排序算法的方法有些得不偿失。因为内置的 sort()
或 sorted()
方法已经足够优秀了,且利用参数key
可以实现不同的功能,非常灵活。二者的区别是sort()
方法仅被定义在list
中,而sorted()
是全局方法对所有的可迭代序列都有效。
✅ Exp3:分别使用快排和sort()
方法对同一列表排序。
测试数组:lists = [2,1,4,3,0]。
- 方法一
def quick_sort(lists,i,j):
if i >= j:
return list
pivot = lists[i]
low = i
high = j
while i < j:
while i < j and lists[j] >= pivot:
j -= 1
lists[i]=lists[j]
while i < j and lists[i] <=pivot:
i += 1
lists[j]=lists[i]
lists[j] = pivot
quick_sort(lists,low,i-1)
quick_sort(lists,i+1,high)
return lists
- 方法二
lists.sort()
方法一耗时 2.4796975000000003s,方法二耗时 0.05551999999999424s,性能提升 97.76% 🚀
顺带一提,sorted()
方法耗时 0.1339823999987857s。
可以看出,sort()
作为list
专属的排序方法还是很强的,sorted()
虽然比前者慢一点,但是胜在它“不挑食”,它对所有的可迭代序列都有效。
扩展:如何定义sort()
或sorted()
方法的key
❓
- 通过
lambda
定义
#学生:(姓名,成绩,年龄)
students = [('john', 'A', 15