[Python][刷题常用模块]用Python刷题,这一篇就够了

本文介绍了Python中用于刷题的常用内建和标准库模块,包括算术、数据结构、函数式编程优化等方面的函数和模块,如math、collections.Counter、heapq、functools等,并强调了TLE敏感操作,旨在帮助提升解题效率。
摘要由CSDN通过智能技术生成

引言

最近在复刷LeetCode,某种意义上做题要做得快,对STL保持熟悉度是蛮重要的,至少在求和、排序、查找时就不用重复敲代码了。于是,整理了部分常用python算术/数据结构/数理模块,以及相应的对TLE敏感的操作,希望能帮助到其它人。

python内建函数

  • format():格式化输出函数(在控制输出精度和空格补齐等问题中很好用)
  • round(x):四舍五入
  • cmp(x, y):比较2个对象,如果 x < y x < y x<y 返回 − 1 -1 1, 如果 x = y x=y x=y 返回 0 0 0 , 如果 x > y x > y x>y 返回 1 1 1
  • abs(x)/max()/min():绝对值/最大值/最小值
  • len():返回对象的长度,如列表、字典等
  • range(start=0, stop, step=1]):返回一个可迭代对象,常用于for循环
  • sum(iterable): 求和函数
  • pow(x, y, [z]):求幂函数 x y x^y xy,运算完毕可以顺带对z取模;大数取模问题可以直接AC
  • sorted(iterable, key, reverse):采用Timsort的稳定排序算法,默认升序;该函数太重要了,请多写写代码研究一下它的各个参数
  • isinstance(obj, type):判断类型
  • all(iterable)/any(iterable):迭代与操作/迭代或操作(01None均等价于False)
  • int(x, base=10))/float()/str():转整数(可自定义进制)/转浮点数/转字符串
  • bin()/oct()/hex():10进制转二进制(返回0b开头的字符串)/10进制转八进制(返回0开头的字符串)/10进制转十六进制(返回0x开头的字符串)
  • ord()/chr():字符转ASCII或ASCII转字符
  • complex(real, imag):创建一个复数,不过现在可以直接通过语法糖创建,eg:1+2j
  • divmod():函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)
  • eval(expression, [globals, locals]):执行一个字符串表达式,并返回表达式的值,eg:eval('pow(2, 2)') = 4 =4 =4;在某些字符串解析题中非常好用,详细可见>此处<
  • map(function, iterable...):映射函数,需要注意的是在Python3中返回一个迭代对象而不再是一个列表
  • filter(function, iterable):过滤函数
  • reduce(function, iterable, [initializer]):累积函数,现在被归类到functools模块中
  • zip(iterable, ...):将对象中对应的元素打包成一个个元组,常用于并联取值,详见下文的【注意事项】
  • hash(obj):返回哈希码,常用于对象比较或将其转化为唯一的索引(不过更推荐使用id()完成该需求)
  • id():返回对象的唯一标识符,和hash()类似,但更鲁棒更快且可以对listdef等对象求id
  • enumerate():将一个可遍历的数据对象组合为一个索引序列,eg:for i, v in enumerate(list_a):

>参考资料:完整列表<


注意事项

  1. 标准输出函数print(*objects, sep=' ', end='\n')可以通过设置seq标志位来设定间隔字符、设置end来设定结尾字符,常用于进行灵活的输出。对列表输出时,也常用' '.join(result_list)来快速输出一个串,而不用挨个遍历。
  2. 需要注意的是,若从range()中取遍历指示器,在Python 3中,在for循环内重复定义迭代变量不影响迭代遍历的值,如:
# (Python 3)该段代码最终输出0 1 2三行,而不是只有一行0
for i in range(3): # 并不等价于C语言的 for(int i=0;i<3;i++)
	print(i)
	i += 10 # 内部遍历不影响作为循环i的值,这跟C语言差异很大,请留心
  1. mapfilterreduce等函数式编程函数很重要,能够让你少敲很多代码,特别是filter在筛选题中有高的实用性。
  2. 特别的,float()可用来构造无限值,如float('inf')
  3. yield关键字也很重要,可用来创建生成器,在数列生成、斐波那契查找等用处很大,可以极大的节省开销。>举例一则<>教程指南<。需要注意的是,当迭代器函数执行结束时,将自动抛出StopIteration异常,仅在 for 循环里,无需处理StopIteration异常,循环会正常结束,否则需要使用except关键字捕获。
  4. 有些时候tryexcept Exception as efinally等语句可以直接避免在函数体里进行空值检定,大大减少敲键盘的时间开销:>举例一则<
  5. 善用set()来进行列表去重。
  6. format()函数能方便你的格式化输出,如小数精度控制问题,请考虑>进行学习<
  7. input()raw_input()的区别在于对于python的两个版本(2/3)表现不一致,python 3请使用前者,接收到的数据默认为str
  8. 对于非对象类(如list)变量,需要用global关键词在函数内使用全局变量。
  9. del关键词会比list.pop(index)拥有更高的效率,属于TLE敏感的操作。
  10. list[::-1]语法糖可以快速对列表进行倒序,在字符串倒序等问题中有奇效;但list.reverse()更高效,属于TLE敏感的操作。(另外需要注意:后者是原地倒序)
  11. 在python 3中,zip()返回一个可迭代对象,需要手动list()以进行其它列表操作。
  12. 求均值、中位数、众数的API在statistics模块中;求众数可以调用collections.Counter来实现。
  13. python默认的递归栈很有限,有时候会出现C语言能过而python不能过的情况,请>参考此处<解决这个问题——maximum recursion depth exceeded in comparison

算术模块

1. math

常量:

  • pi:圆周率 (3.141592653589793)
  • inf:无限大
  • nan:非数字(Not A Number)
  • e:自然数
  • tau:圆周率的两倍,用于计算弧度和角度的换算。( 2 π × 2π \times 2π×弧度 = 360 ° =360° =360°)

常用方法:

  • floor(x):向下取整,eg: f l o o r ( 35.7 ) =
  • 38
    点赞
  • 270
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值