预备知识
Number 数字
int:1
float:1.1
complex:4+3j
Bool:True/False
运算:+(加) -(减) ×(乘) /(除) //(整除) %(取余)
取绝对值:abs(-1)=1
最大最小:max(1,2,3)=3,min(1,2,3)=1
pow(x,y) = $x^y$
sqrt(x) = $\sqrt{x}$
List 列表
a = [1,2,3,4,5]
查找:a[0]:1 a[1]:2
增加:a.append(6),a=[1,2,3,4,5,6]
更新:a[0]=9,a=[9,2,3,4,5,6]
删除:a.pop(0),a=[2,3,4,5,6],pop会返回删除的值,a.pop(),默认删除最后一个
常用函数:a=[2,3,4,5]
len(a):4
max(a):5
min(a):2
range(0,10) = range(10) : 0,1,2,…,9
a.reverse(),a=[5,4,3,2]
a.clear(),a:[]
迭代/遍历 List
| |
| |
List comrehension
| |
if condition
| |
Tuple 元组
List: [1,1.5,“abc”] 增删改查
Tuple:(1,1.5,“abc”) 只有查
Tuple 查找:
a=(1,1.5,“abc”)
a[0]=1,a[1]=1.5,a[2]=“abc”
str/char
常用函数:
len(),max(),min()
in 操作
slice 切片操作,可以用于list/tuple
a=[1,2,3,4,5]
b=(1,2,3,4,5)
a[0:3]:0,1,2 [1,2,3]
b[0:3]:0,1,2 (1,2,3)
start:0,end:3,左闭右开
最后一位元素,可以用a[-1]表示
a[2:-1],取不到最后一个元素
a[2: ]:取到最后一个元素
Set 集合
a={1,1.5,“abc”},无序不重复
“abc” in a -> True
增:a.add(1) -> {1,1.5,“abc”}
a.add(2) -> {1,2,1.5,“abc”}
改:a.update(a) -> {1,2,1.5,“abc”}
a.update({4,5}) -> {1,2,1.5,“abc”,4,5}
删:a.remove(2) = {1,1.5,“abc”,4,5}
len/max/min
= | & ^
a = {1,2,3} b = {2,5,9}
a - b
a | b 或
a & b 与
a ^ b 不同时有的
Dictionary 字典
dict = {“name”:“learning”,“age”:18}
key:value,利用key找value
查:
dict[“name”]:learning
dict[“age”]:18
增:
dict[“platform”]=“youtube”
dict: name age platform
改:
dict[“platform”]=“bilibili”
删:
dict.pop(“platform”)
遍历
| |
String 字符串
s = “hello world”
s[0]:h, s[-1]:d
s[:]:“hello world”
s[0:4]:“hell”
len(s),max(s),min(s)
s.count(“h”):1
s.isupper():False 判断是否都为大写字母
s.islower():True 判断是否都为小写字母
s.isdigit():False
s.lower()->改为全小写
s.upper()->改为全大写
s.strip()->去掉空格
s.lstrip()->去掉左边空格
s.rstrip()->去掉右边空格
s.swapcase()->把大写变为小写,吧小写变为大写
replace(old,new). s.repalce(“l”,“E”)
split(), s.split(" “),返回list,[‘hello’,‘world’]
Array 数组
读非常快,查询、插入、删除非常慢
Linkedlist 链表
数组 VS 链表
数组访问非常快,搜索、插入和删除很慢
链表插入和删除非常快,访问,搜索都很慢
Hash Table 哈希表
| |
Python 的 dict 和 set 底层是哈希表。 哈希表通过 hash(key) 直接算出存放位置,所以查找特别快。 只有“不可变”的东西,才能当哈希表的 key。
Queue 队列
特点:FIFO(先入先出)
双端队列:两边都可进出
List,deque
| |
append(),尾部增加
popleft(),头部删除
上面一起使用,底下一起使用
appendlef(),头部增加
pop(),尾部删除
Stack 栈
特点:LIFO(后入先出)
append()
pop()
len(),max(),min()
Heap 堆
| |
大堆乘-1,后按小堆算
Tree 树
高,深,层
二叉树,普通二叉树,满二叉树(除了叶子节点,每个节点都有左右两个子节点),完全二叉树(从上至下,从左至右编号,编号的节点与满二叉树节点的位置相同)。
二叉树的遍历
前序遍历,根左右
中序遍历,左根右
后序遍历,左右根
1. 两数之和
哈希表解法
| |
暴力解法
| |
49. 字母异位词分组
| |