算法题Python常用内置函数、方法、技巧汇总(其四:数字)
数字相关操作
整除与求余
一般而言,我们使用整除运算//
和求余运算%
来计算两个整数相除的商和余数。
div = 10 // 4
mod = 10 % 4
如果想要同时得到商和余数,可以直接使用内置函数divmod()
来完成。
div, mod = divmod(10, 4)
取整
取整操作分为向上取整和向下取整两种,这两个操作可以用python中的math
内置库的ceil()
函数和floor()
函数来实现。ceil
和floor
的意思分别是天花板和地板,非常形象。
from math import ceil, floor
print(ceil(1.5)) # 得到2
print(ceil(-1.5)) # 得到-1
print(floor(1.5)) # 得到1
print(floor(-1.5)) # 得到-2
直接使用int()
,也可以完成取整。对于正整数而言,int()
是向下取整,对于负整数而言,int()
是向上取整。即int()
操作是一种向零截断的取整操作,或者说int()
操作是对一个浮点数取其整数部分。
print(int(1.5)) # 得到1
print(int(-1.5)) # 得到-1
注意取整后的值的数据类型是int
而不是float
。
无穷大
某些题目在对变量进行初始化的时候,需要将其初始化为无穷大或者负无穷大,这可以用python中的math
内置库的inf
直接得到。
from math import inf
ans = inf
res = -inf
注意inf
的数据类型是float
而不是int
。
进制转换
最常用的进制是十进制,除此之外常用的进制还有二进制、八进制、十六进制。python中有丰富的内置函数来帮助我们实现不同进制之间的转换。
- 十进制转其他进制
内置函数bin()
、oct()
、hex()
能够非常方便地将一个整数num
转化为其对应的二进制、八进制、十六进制字符串。
num = 20
# 20的二进制数是10100
# 输出0b10100,包含前缀"0b"
print(bin(num))
# 输出10100,用切片去除了前缀"0b"
print(bin(num)[2:])
# 20的八进制数是24
# 输出0o24,包含前缀"0o"
print(oct(num))
# 输出24,用切片去除了前缀"0o"
print(oct(num)[2:])
# 20的十六进制数是14
# 输出0x14,包含前缀"0x"
print(hex(num))
# 输出14,用切片去除了前缀"0x"
print(hex(num)[2:])
有几点需要注意:
- 转换后的数据类型是字符串而不是整数
- 字符串包含前缀
"0b"/"0o"/"0x"
,表示是二/八/十六进制。 - 基于第二点,如果想要获得纯数字的转换,可以使用字符串的切片来实现效果。
bin()
、oct()
、hex()
分别是英文单词binary、octal、hexadecimal的缩写。
另外,在某些题目中,如OD真题【模拟】2023B-IPv4地址转换成整数 ,要求进制转换后的结果保持某一固定长度,这个可以用内置函数map()
和lambda
匿名函数搭配来完成。
- 其他进制转十进制
内置函数int()
可以将一个字符串转化为一个十进制整数。
最常见的操作是将一个十进制字符串转化为十进制整数。
num_str = "100"
# 得到十进制的整数num = 100
num = int(num_str)
实际上,int()
函数可以传入参数base
,表示需要转换的原字符串num_str
是用哪种进制来表示的。
num_str = "100"
# 得到从二进制数num_str转化的十进制数num_from_base2 = 4
num_from_base2 = int(num_str, base = 2)
# 得到从八进制数num_str转化而来的十进制数num_from_base8 = 64
num_from_base8 = int(num_str, base = 8)
# 得到从十六进制数num_str转化而来的十进制数num_from_base16 = 256
num_from_base16 = int(num_str, base = 16)
# 得到从七进制数num_str转化而来的十进制数num_from_base7 = 49
num_from_base7 = int(num_str, base = 7)
注意虽然常用的进制是二、八、十六进制,但base
传入其他数字也是可以的。譬如选择base = 7
,表示将一个七进制数字符串,转化为一个十进制整数。
华为OD算法/大厂面试高频题算法练习冲刺训练
-
华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!
-
课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化
-
每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!
-
60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁
-
可上全网独家的欧弟OJ系统练习华子OD、大厂真题
-
可查看链接 大厂真题汇总 & OD真题汇总(持续更新)
-
绿色聊天软件戳
od1336
了解更多
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!