一些在OJ中实用的语法
将矩阵读入列表中
for i in range(1,n+1):
a[i][1:m+1] = list(map(int,input().split()))
分别读入整数n, m, k
n, m, k = map(int, input().split())
开N*N的列表
a = [[0] * N for _ in range(N)]
开长度为N的列表
a = [0] * N
保留n位小数
print("{:.nf}".format(var)) # 推荐使用(n表示小数点后几位小数)
print(".nf"%var) # 用C++/C的同学推荐使用(n表示小数点后几位小数)
print(f{content'var:.n'content}) # 官方推荐使用(n表示有效数字)
通用排序函数
python的多态函数
iterable的通用排序函数sorted(iterable, cmp=None, key=None, reverse=False)
1. 可以重写小于号
2. 可以指定比较的key
3. 可以指定升序降序
注意:返回值为iterable,所以需要接收返回值
示例1:简单的iterable
a = [1, 10, 6, 9, 8]
b = sorted(a) # b为有序,a还是为原来的顺序
示例2:复杂一点的iterable
students = [{'name':'tom','age':20},
{'name':'jim','age':10},
{'name':'alice','age':18},
{'name':'jerry','age':16},
{'name':'penny','age':12}]
sort_result = sorted(students, key=lambda x : x['age']) # 以年龄为关键字排序
特别提醒:由于sorted函数内置了key和reverse功能,因此效率低的cmp就被取消了
堆
python标准库中的heapq
模块(小根堆,不太方便)
import heaqp
# from heapq import *
常用函数
1. 把一个元素放入堆中:heapq.heappush(heap, item)
2. 将list
堆化构造函数:heapq.heapify(list)
3. 弹出堆顶元素:heapq.heappop(heap)
4. 查看堆顶元素:heap[0]
5. 将多个list
合并为一个堆结构:heapq.merge(*iterable, key, reverse)
队列
双端队列deque()
from collections import deque
常用函数
1. 构造函数:q = deque()
2. push:q.append(item)
3. pop:q.popleft()
栈
直接用list
即可
stack = list()
stack.pop() # 出栈
stack.append(item) # 入栈
Python的for语句的特殊功能
与C++不同,Python的for语句拥用一个else子句,当且仅当循环正常结束时才执行(也就是说除去了break)
具体如下例(Source: 染色法判断二分图):
for i in range(1,n+1):
if not color[i]:
if not bfs(i):
print('No')
break
else:
print('Yes')
语义:只有当所有不连通的子图都是二分图时,整个图才是二分图
大佬 请问Python打OI有哪些可以优化时间和空间的技巧,面前只知道stdin stdout
这块技巧没研究过😂
最近发现一个挺好用的python技巧,c++设置flag在循环里判断的过程可以用python循环特有的break和else来替代,写出来能更简洁,更python一点。
嗯?描述有点抽象啊,有具体例子康康嘛
可以看一下我写的染色法判二分图最后输出的部分
可以可以,Python的for有一个else子句
想法很棒,我加上去
f’{content:format}’
保留小数那个,python3.6以后官方文档推荐格式化用f’{}’,方便很多,小数的话就是f’{var:.n}’
可以可以,我补充一下