如何让 Python 变快

公众号:原少子杨

程序快慢的标准就是时间复杂度。时间复杂度使用大 O 标记法,这个大家应该都清楚,下面是常见的增长量级:

增长量级名称
O ( 1 ) O(1) O(1)常量级
O ( l o g b n ) O(log_bn) O(logbn)对数级
O ( n ) O(n) O(n)线性级
O ( n l o g b n ) O(nlog_bn) O(nlogbn) n l o g n nlogn nlogn
O ( n 2 ) O(n^2) O(n2)平方级
O ( n 3 ) O(n^3) O(n3)立方级
O ( c n ) O(c^n) O(cn)指数级
Python 中基本操作分析

常量时间

算术操作大部分都是常量时间,除法 > 乘法 > 加法和减法;

索引操作(下标访问)和 len 函数也是常量时间;

假如一个字符串只包含一个字符,所有的操作都是常量的;

在列表结尾添加和删除一个元素是常量的;

大部分字典操作都是常量的,但是 update 方法的运行时间和传入的字典大小成正比,keys、values 和 items 都是常量时间,因为它们返回的是迭代器,但是如果循环遍历这个迭代器,则循环是线性的。

线性时间

使用 for 循环遍历一个序列或字典是线性的;

字符串和元组的大部分操作都是线性的;

min 和 max 函数也是线性的;

切片操作的运行时间与输出的长度成正比,而与输入的长度无关;

内置函数 sum 也是线性的,但速度更快;

字符串拼接是线性的,运行时间与操作数的长度的总和有关,所有的字符串方法都是线性的。

其他时间

大多数列表方法是线性的,但是除非空间不足时复制到另一个更大的空间,排序是 n l o g n nlogn nlogn

如果循环体的增长量级是 O ( n a ) O(n^a) O(na) 则整个循环是 O ( n a + 1 ) O(n^{a+1}) O(na+1),如果不论 n n n 是多少,循环只最多运行 k k k 次,则及时对很大的 k k k 来说,整个循环的增长量级还是 O ( n a ) O(n^a) O(na)

搜索算法的分析

遍历操作是线性的,二分查找是对数级的,散列表是常量时间。

了解了以上这些基本操作的时间复杂度,在写 Python 程序的时候是不是就可以有针对性的选择操作了呢?一定要在实际中多多运用这些方法,才能够极大的提高程序运行效率。

欢迎关注我的公众号!

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值