基本
输入
def cin1():
return [int(i) for i in input().split()]
def cin2():
return map(int, input().split())
def cin3():
return list(map(int, input().split()))
# 输入一个常数
n, = cin() # 注意','
m, n = cin()
# 输入一个数组
arr = cin() # 注意cin2会返回map对象
输入输出重定向
使用操作系统的重定向
python script.py < input > output
Python 与 STL
本人出身于C/C++
,这里用类STL
表示Python
中可利用的built in lib
priority queue (heap)
优先队列往往用堆来实现。优先队列 - 维基百科
from heapq import *
vector
arr = list()
arr = [0]*n
arr = [[0]*n for _ in range(m)]
set
set_ = set()
set_ = {1, 2, 3}
map
from collections import Counter, defaultdict
arr = [1, 1, 2, 2]
counter = Counter(arr) # 计数
defaultdict_ = defaultdict(lambda: -1) # 默认字典
dict_ = dict()
dict_ = {
1: 2,
2: 4
}
dict_ = {i: i for i in range(5)}
stack
列表方法使得列表作为堆栈非常容易,最后一个插入,最先取出(“后进先出”)。要添加一个元素到堆栈的顶端,使用
append()
。要从堆栈顶部取出一个元素,使用pop()
,不用指定索引。
queue
列表也可以用作队列,其中先添加的元素被最先取出 (“先进先出”);然而列表用作这个目的相当低效。因为在列表的末尾添加和弹出元素非常快,但是在列表的开头插入或弹出元素却很慢 (因为所有的其他元素都必须移动一位)。
若要实现一个队列,可使用
collections.deque
,它被设计成可以快速地从两端添加或弹出元素
from collections import deque
不需要指针的链表
class LinkedListNode:
def __init__(self, val, nxt) -> None:
self.val = val
self.nxt = nxt
vals, nxt = [], []
还可以是双指针链表
vals, pre, nxt = [], [], []