Python手撕常用模版
Python手撕常用模版
标准输出
1 | a = 10 |
标准输入(ACM模式)
- 一般读入(stdin/input)
1
2
3
4import sys
for line in sys.stdin:
a = line.split()
print(int(a[0])+int(a[1]))1
2
3
4
5
6
7
8
9# while input()!= None:
while True:
try:
a=int(input().split(" ")[0])
b=int(input().split(" ")[-1])
# 或写为 a,b=map(int,input().split())
print(a+b)
except:
break - 读取多行输入且第一行为行数(即固定行数)
1
2
3
4
5if __name__ == '__main__':
n = input() # 获取行数
for _ in range(n) # 从第二行开始获取内容并根据题目来操作
# 这里我直接把输入转为数组
print(list(map(int, input().split()))) - 读取多行输入但不知有多少行(以读入空行且是空字符串结束)
1
2
3
4
5
6if __name__ == '__main__':
# 以读入空行为结束
arr = []
for line in iter(input,''):
arr.append(line.split())
print(arr) - 读取多行输入但不知有多少行(以读入空行结束)
1
2
3
4
5
6
7
8
9
10
11if __name__ == '__main__':
try:
arr = []
while True:
str_input = input().strip() # 这样即使遇到空行 也会转为空字符串 就是与上一个结束情况不同的地方所在
if str_input == '':
break
arr.append(str_input.split())
print(arr)
except:
pass
列表List
- 初始化
1
2
3
4
5
6
7
8
9
10
11
12
13# 初始化一个空列表
nums = []
# 初始化一个包含元素 1, 3, 5 的列表
nums = [1, 3, 5]
# 初始化大小为 n,元素都为0的列表
n = 10
nums = [0] * n
# 二维列表,m 行 n 列,元素都为 1
m, n = 3, 4
matrix = [[1] * n for _ in range(m)] - 常见方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67lst = [0] * 10
# 输出:False
print(len(lst) == 0)
# 输出:10
print(len(lst))
lst.append(4) # 添加元素
lst.pop() # 删除末尾元素
lst.pop([index]) # 返回值:被移除的元素
lst.insert(i, x) # 插入元素(在i位置添加x)
lst.extend(lst1) # extend一次性添加多个元素
lst.remove(2) # 删除第一个匹配元素
lst.sort() # 原地排序
lst.reverse() # 反转列表
lst[1] = 20 # 直接修改元素
# 从后往前访问
lst[-1]表示最后一个数
for i in range(0, -10, -1) # 0, -1, -2, -3, -4, -5, -6, -7, -8, -9
for i in reversed(range(len(lst)-1)) # 加一个reverse可以直接颠倒
# enumerate 枚举
lst = ["a", "b", "c"]
for i, v in enumerate(lst):
print(i, v)
# 输出:
#0 a
#1 b
#2 c
# map
# 可以将参数一一映射来计算, 比如
date = "2019-8-15"
Y, M, D = map(int, date.split('-')) #Y = 2019, M = 8, D = 15
# map返回的是迭代对象而不是一个列表,要转成列表要加list
#sort
# 1.调用sort()排序,不会产生新的列表。降序排序lst.sort(reverse=True),升序排序lst.sort()
# 2.使用内置函数sorted()排序,会产生新的列表对象
lst1=sorted(lst) # 升序排序
lst2=sorted(lst,reverse=True) # 降序排序
l1 = [(1,2), (0,1), (3,10)]
l2 = sorted(l1, key=lambda x: x[0]) # 按照 tuple 的第一个元素进行排序key允许传入一个自定义参数
# 输出:l2 = [(0, 1), (1, 2), (3, 10)]
#排序默认从小到大。可以用reverse=True倒序
#列表生成式
lst = [i*j for i in range(1,10)]
#lambda函数:lambda 参数列表: 表达式
add = lambda a, b: a + b
#Zip
x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)
list(zipped) #[(1, 4), (2, 5), (3, 6)]
# 使用keys(), values(), items()这三个方法可以分别获得key, value, {key: value}的数组。
# max可以代替if来更新更大的数
maxnums = max(maxnums, tmp)
# 赋值:注意原来已有列表,需要整体改变这个列表的值,替换为列表2的值,需要使用for循环一个一个赋值;此外,lst1 = lst2是引用的复制(不是拷贝),操作lst1会改变lst2的值(指向同一个地址),为了不改变lst2的值,需要使用lst1=lst2[:](创建新的列表,但是还是属于浅拷贝)
# 浅拷贝(共享嵌套对象的引用):
lst_copy = lst.copy() # 或 lst[:] 外层独立,嵌套对象共享
# 深拷贝(完全独立,需import copy):
import copy
deep_copy = copy.deepcopy(lst)#如果列表中包含嵌套的可变对象(如列表、字典),需使用 copy.deepcopy() 实现完全独立
多维列表
1 | ls = [] # 二维列表新建可以直接建一个一维列表,后面直接append列表数据就可以了 |
字符串String
1 | ord('a') # 返回单个字符的 unicode: |
双端队列Deque
1 | from collections import deque |
队列Queue
1 | from collections import deque |
栈Stack
1 | # 使用 list 作为栈 |
字典Dict
1 | # 初始化字典 |
集合Set
1 | # 初始化集合 |
计数器Counter
1 | from collections import Counter |
经典二叉树模版
1 | #链式存储二叉树的定义 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Golden Arc!