这里只记录和算法相关的 py 语法。
🍕 其他
在做题过程中,涉及奇偶数,下标,中点时。牢记下面四种情况:
n//2偶数(n=2) 奇数(n=3) 0 1 0 1 2 ↑ ↑n//2 - 1偶数(n=2) 奇数(n=3) 0 1 0 1 2 ↑ ↑(n+1)//2偶数(n=2) 奇数(n=3) 0 1 0 1 2 ↑ ↑(n-1)//2偶数(n=2) 奇数(n=3) 0 1 0 1 2 ↑ ↑
🍕 常见的对象及其方法和属性(实现数据结构)。
全局函数
len(..)map(func, ...)list(Iterable)input()读取一行输入max(..),min(..),sum(..)sorted(.., key=lambda x: 0-x[0])降序round(..),enumerate(..),reversed(..)ord(string),chr(number)字符和 ASCII 互换bin(num)将数字转换为二进制,格式是字符串- 没怎么用到,但感觉不错的
abs(number)bin(number)返回数字的二进制形式hex(number)返回数字的十六进制形式divmod(x, y)返回(x//y, x%y)
字符串
upper()lower()join(Iterable[str])split(sep)做算法时,不传入 sep 更好,因为这样会自动丢弃空字符串。strip()replace(old, new)返回替换后的字符串ljust(width, fillchar),rjust()填充字符到指定长度。
list列表append(object)从尾部添加insert(index, object)从指定位置添加pop(index)弹出指定位置元素reverse()反转(可用[::-1]代替)index(val)找不到时会报错,想要判断是否存在,应该用in关键字remove(val)删除
{}dictpop(key)keys()values()get(key, default_value)
from queue import Queue- 完全可以用
list代替 put(val)get()empty()- 不支持
len()
- 完全可以用
from queue import PriorityQueueput(val)get()取出最小值empty()- 比较对象时,需要对象有提供比较方法(
__lt__)
setadd(ele)pop(ele)remove(ele)不返回
import heapqheapify(iterableObj)原地修改可迭代对象为小根堆heappush(iterableObj, val)插入新元素, 确保该元素处于正确的位置heappop(iterableObj)弹出最小元素, 同时维持堆heappushpop(iterableObj, val)插入然后返回最小元素heapreplace(iterableObj, val)弹出最小元素然后插入
🍕 操作符
0 <= x < LENpy 支持这种写法!//运算符- 整数除法, 向下取整, 等同于
int(a / b)
- 整数除法, 向下取整, 等同于
**阶乘a ** 0.5求根号很方便
[::-1]反转列表/数组/字符串- 比如
a[::-1]将会返回一个反转后的a - 比如
a[x:] = a[x:][::-1] - 比如
a[x:y] = a[x:y][::-1]
- 比如
[0] * num- 创建数组, 注意如果元素是对象, 则不能使用乘号, 得使用推导式