一、输入获取(核心两类场景) input() 读取一整行 ,返回字符串,末尾换行自动剔除。
1.1 读取单个数字(数字单独一行) 1 2 3 4 a = int (input ()) f = float (input ()) s = input ()
报错场景 :一行输入多个数字 2 3,直接 int(input()) 会报错 invalid literal。
1.2 一行多个数字(OJ高频) 1 2 3 4 5 6 7 8 a, b = map (int , input ().split()) nums = list (map (int , input ().split())) x, y = map (float , input ().split())
split() 特性:自动按任意空白 (空格、Tab、多个连续空格)分割。
1.3 分行读取多组数据 1 2 3 4 5 6 n = int (input ()) arr = [] for _ in range (n): val = int (input ()) arr.append(val)
2. 高速输入 sys.stdin(大数据量推荐) 数据量大时 input() 速度慢,使用 sys 批量读取。
1 2 3 4 5 6 7 8 9 10 11 import syslines = sys.stdin.readlines() a = int (lines[0 ]) b = int (lines[1 ]) data = list (map (int , sys.stdin.read().split())) a = data[0 ] b = data[1 ]
3. 输入格式冲突报错说明
代码写法
要求输入格式
错误输入
报错信息
a=int(input())
一数一行
2 3
ValueError: invalid literal for int()
a,b=map(int,input().split())
一行两个数
仅输入1个数
ValueError: not enough values to unpack
二、输出 print 用法 2.1 基础打印 1 2 3 4 5 6 7 8 print ("Hello" )print (123 )print (a, b, "result" )print ("NO" , end="" )print (1 ,2 ,3 , sep="," )
2.2 格式化输出 1 2 3 4 5 6 7 8 9 10 x = 10 print (f"数字是{x} " )print ("数字是{}" .format (x))pi = 3.14159 print (f"{pi:.2 f} " )
2.3 批量输出(大数据) 多次 print 效率低,拼接字符串一次性输出:
1 2 3 4 res = [] res.append("YES" ) res.append(str (123 )) print ('\n' .join(res))
三、Python 容器(对标 C++ STL) 1. list 数组 / vector 对应C++ vector<int>,可变、有序、可重复。
1 2 3 4 5 6 7 8 9 10 11 12 13 arr = [] arr = [1 ,2 ,3 ] arr = [0 ]*10 arr.append(4 ) arr.pop() arr.pop(0 ) arr.insert(1 , 99 ) arr.remove(2 ) print (arr[0 ]) print (len (arr))
2. deque 双端队列(queue / deque STL) 需导入 collections,首尾增删O(1),替代list做队列。
1 2 3 4 5 6 7 8 9 from collections import dequeq = deque() q.append(1 ) q.appendleft(2 ) q.popleft() q.pop() print (q[0 ]) print (len (q))
3. set 集合(std::unordered_set / set) 元素唯一、无序 ,去重、查找O(1)。
1 2 3 4 5 6 s = set () s.add(1 ) s.add(1 ) s.remove(1 ) print (1 in s) print (len (s))
4. dict 字典(std::unordered_map / map) 键值对存储,key唯一,哈希查找。
1 2 3 4 5 6 7 8 9 10 11 12 mp = {} mp["a" ] = 10 mp[5 ] = 20 print ("a" in mp) print (mp.get("b" , 0 )) del mp["a" ] print (len (mp)) for k in mp: print (k, mp[k])
5. tuple 元组 不可变数组,对应const vector,不能增删改。
1 2 3 t = (1 ,2 ,3 ) print (t[0 ])
容器功能对标简表
Python容器
C++ STL
核心特性
list
vector
可变有序数组,尾部操作快
deque
deque / queue
双端快速增删,适合队列BFS
set
unordered_set
自动去重,快速查找
dict
unordered_map
key-value哈希映射
tuple
const vector
只读固定长度数组
四、通用刷题模板(OJ专用,带Main类避免判题报错) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 from collections import dequeclass Main : def main (self ): a, b = map (int , input ().split()) a %= 2 b %= 2 if a == 1 or b == 1 : print ("NO" ) else : print ("YES" ) if __name__ == "__main__" : Main().main()
五、补充注意事项
编码声明 :代码含中文注释时,首行添加 # -*- coding: utf-8 -*-,消除 Non-ASCII 报错;
输入格式严格匹配 :判题系统输入固定,分行输入不能用 split(),单行多数字不能分次 input();
容器选择 :BFS广度优先搜索优先用 deque,不要用 list 频繁 pop(0)(时间复杂度高);
大数据优化 :数据量上万时,使用 sys.stdin.read() 一次性读取全部输入,减少IO耗时。