蓝桥杯总结笔记(赛前复习)
- 对字典进行排序:用
sorted()
函数进行排序,默认排序为升序,降序则添加参数reverse=True
,语法为sorted(可迭代对象,key=函数名,reverse=False/True)
例:
d = {}
sorted(d.items()) # 按键排序
sorted(d.items(), key=lambda x: x[1]) # 按值排序
enumerate()
遍历列表,列出数据下标和数据
例:
L = ['a', 'b', 'c']
for i, j in enumerate(L):
print(i, j)
输出:
0 a
1 b
2 c
- 注意数据类型,尤其是数字,区分数字是str类型还是int类型
- 注意变量名是否跟外部变量名重复,注意变量的作用域
- 学会使用位运算
1 << n # 表示2的n次方
a & b # 按位与运算,若a,b用二进制表示状态,则可用(a&b)==0判断两个状态是否相交,或者判断某一位是否被选中
判断一个整数是否是2的幂
def isPowerOfTwo(n: int) -> bool:
return n > 0 and (n & (n - 1)) == 0
- 注意是否需要进行边界判断,若题目给定数据可包含空,则需要对该情况进行处理,等等。
- Python中常见的数据结构的操作
- dict
# 增、改
dict[key] = value # 根据键值对添加
dict.update({key: value}) # 使用update()方法添加
# 删
del dict[key] # 删除单一元素
dict.clear() # 清空字典
# 查
for key, value in dict.items(): # 遍历键值
print(key, value)
# 其他函数
dict.items() # 以元组形式返回字典所有键值对
dict.keys() # 以列表形式返回字典中所有键
dict.values() # 以列表形式返回字典中所有值
- list
list.append(x) # 从列表尾添加元素x
list.insert(index, x) # 向列表中index位置插入元素x
list.extend(list) # 扩展列表
list.remove(x) # 列表中删除元素x(删除第一个元素x)
list.pop(index) # 删除列表中index位置的元素,index默认为-1
list.index(x) # 返回元素x第一次出现位置的索引,不存在元素x会抛出异常,需要进行异常判断处理
list.reverse() # 反转列表
list.sort() # 排序列表,默认升序
list.count(x) # 统计元素x在列表中的出现次数
- deque
用做队列
from collections import deque
q = deque()
# 队头在右边
q.appendleft(x) # 从左边入队
q.pop() # 从右边出队
# 队头在左边
q.append(x) # 从右边入队
q.popleft() # 从左边出队
用做栈
from collections import deque
s = deque()
# 栈顶在右边
s.append(x) # 从右边入栈
s.pop() # 从右边出栈
# 栈顶在左边
s.appendleft(x) # 从左边入栈
s.popleft() # 从左边出栈
- str
other in string # 判断字符串string中是否存在子串other
string.find(other) # 返回子串other在字符串string中第一次出现处的索引,若不存在则返回-1
string[begin: end: step] # 切片获取子串,左闭右开
list(string) # 将字符串转为字符列表
str(integer) # 将整数integer转为字符串类型
- 进制转换&ASCII
- 10进制:int(string, base)
注意参数类型为str,base指string的进制类型,可以将不同进制的字符串转为十进制整数 - 其他进制
2进制:bin()
8进制:oct()
16进制:hex()
注意这些函数的参数类型为int,将十进制转为其他进制,输出为字符串类型,通常使用切片去除前缀 - 十进制与ASCII转换
ord('A') # 65
chr(65) # 'A'
- 第三方库
- math
# 常量
math.pi
math.e
math.inf
# 方法
math.ceil(x) # 对浮点数向上取整
math.floor(x) # 对浮点数向下取整
math.log(x, base) # 以base为底x的对数,base默认为e
math.sqrt(x) # 平方根
- collections
主要使用Counter用来统计列表、字符串或可迭代对象中元素的数量
from collections import Counter
c = Counter(iterable) # 计数
c.most_common(n) # 统计出现频率最高的前n个元素,不过只返回前n个元素
c.update(iterable) # 动态增加元素
c.subtract(iterable) # 动态减少元素
-
itertools
- 使用itertools.combinations(iterable, r)创建迭代器,返回iterable中所有长度为r的子序列
import itertools list1 = [1, 2, 3, 4] list2 = list(itertools.combinations(list1, 2)) # list2: [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
- 实现一组数据的所有排列组合
import itertools list1= [1, 2, 3] list2 = [] for i in range(1, len(list1) + 1): list2.append(list(itertools.combinations(list1, i))) # list2: [[(1,), (2,), (3,)], [(1, 2), (1, 3), (2, 3)], [(1, 2, 3)]]
- 列表初始化
- 一维列表
[0] * n
[0 for _ in range(n)]
- 二维列表
初始化n行m列的列表
[[0 for _ in range(m)] for _ in range(n)]
- 浮点数精度问题
推荐使用format()方法进行四舍五入,round()有坑
x = 1.234567 # x == 1.234567
y = format(x, '.3f') # y == '1.235' 注意是str类型
z = float(format(x, '.3f')) # z == 1.235 可以使用float()转换成浮点型,但是不一定会保留指定位数,如1.0
- 几何
- 求面积
鞋带公式
S = 1 2 ∣ ∑ i = 1 n ( x i y i + 1 − y i x i + 1 ) ∣ S = \frac{1}{2} |\sum_{i=1}^n (x_iy_{i+1} - y_ix_{i+1})| S=21∣i=1∑n(xiyi+1−yixi+1)∣
- 最终只能print答案,不能有debug的过程!
参考
Python 中几种判断子串存在的性能比较及分析
Python保留指定位数的小数
Python itertools模块combinations方法
【Green公式】Hunter’s Apprentice(判断多边形为顺时针或逆时针)–鞋带公式