1、按关键字排序
a.第一关键字升序
intervals = sorted(intervals, key=lambda x:x[0])
b.多关键字,第一关键字降序
people = sorted(people, key = lambda x:(-x[0], x[1]))
c.自定义比较函数
def compare(x, y):
#小于0的时候调换位置
return int(y+x) - int(x+y)
nums = sorted(map(str, nums), key=cmp_to_key(compare))
2、累积函数
reduce函数:每次从list中取一个元素和上一次的结果做运算
reduce(lambda x, y: x ^ y, nums)
3、ascii码和字符的互换
a.
ord(‘a’)
b.
chr(97)
4、小顶堆的使用
import heapq
h=[]
heapq.heapify(h)
heapq.heappush(h,2)
heapq.heappop(h)
5、记忆化搜索
import functools
@functools.lru_cache(None)
6、获取数字的二进制表示
bin(8)
负数的时候需要考虑补码
bin(-8 & & 0b1111111111111111)
7、计算字符串中某个字符的数量
s.count(ss)
8、计算不同值出现的个数
import collections
dic = collections.Counter(tasks)
9、map函数用法
map() 函数语法:map(function, iterable, …)
a.
def square(x) : # 计算平方数
return x ** 2
A=list(map(square, [1,2,3,4,5])) # 计算列表各个元素的平方
b.
list(map(lambda x: x * x, data))
10、filter函数用法
filter(function, iterable) #function为判断函数,iterable为可迭代对象
以下代码展示了从列表中过滤掉所有奇数:
def is_odd(n): return n % 2 == 1
tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
11、注意字典的关键字也可以是一个类
12、3, 1 = divmod(7, 2)
直接获得商和余数
13、is函数
判断字符是否是数字 s.isdigit()
判断是否是小写字母 s.islower(0
判断变量(对象)的类型 isinstance (a, int)
14、bit_count()
3.10版本以后更新的函数,可以直接计算数的二进制的1的为数,方便计算信息距离
15、获取最低的为1的幂次
(x) & (-x)
16、re.split
leetcode 819
当有多个切割符的时候,str.split就不行了
https://blog.csdn.net/weixin_37804469/article/details/106887991
两个以上切割符放到'[ ]'这个里面
n = 'sssksssdsss'
print(re.split(r'[kd]', n)) # ['sss', 'sss', 'sss']
17、random的用法
randint(0,n) #在0-n中随机取一个值
randrange(n) #在0-n-1中随机取一个值
# 伪随机数当制定了random.seed()后,随机的结果就是确定的,当不指定seed时,使用当前时间作为seed
https://docs.python.org/zh-cn/3/library/random.html
18、二分查找
bisect.bisect_left(list, num) #在list中查找num的索引
bisect.insort_left(list, num) #在list中插入num,放入值的左侧
19、反转矩阵
grid_new = [list(g) for g in zip(*grid)] # 883
20、pairwise
以窗口大小为2重新组织列表
# Python 3.10 新特性
20、有序字典
from sortedcontainers import SortedDict
i = self.booked.bisect_left(end)
大于等于end的标号
21、创建枚举类
from enum import Enum
class Week(Enum):
monday = 1
22、得到一个二进制数第一个为1的位置
x = x1&-x1