这里只记录和算法相关的 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 PriorityQueue
put(val)
get()
取出最小值empty()
- 比较对象时,需要对象有提供比较方法(
__lt__
)
set
add(ele)
pop(ele)
remove(ele)
不返回
import heapq
heapify(iterableObj)
原地修改可迭代对象为小根堆heappush(iterableObj, val)
插入新元素, 确保该元素处于正确的位置heappop(iterableObj)
弹出最小元素, 同时维持堆heappushpop(iterableObj, val)
插入然后返回最小元素heapreplace(iterableObj, val)
弹出最小元素然后插入
🍕 操作符
0 <= x < LEN
py 支持这种写法!//
运算符- 整数除法, 向下取整, 等同于
int(a / b)
- 整数除法, 向下取整, 等同于
**
阶乘a ** 0.5
求根号很方便
[::-1]
反转列表/数组/字符串- 比如
a[::-1]
将会返回一个反转后的a - 比如
a[x:] = a[x:][::-1]
- 比如
a[x:y] = a[x:y][::-1]
- 比如
[0] * num
- 创建数组, 注意如果元素是对象, 则不能使用乘号, 得使用推导式