刷题所需的python语法

最近想通过刷题来熟悉python的语法,将一些注意点记录在本篇博客中。

参考链接

0. 输入输出

# 接收参数
# 1 2
# 3 4
# map()能将序列映射到指定的数据类型上
a, b = map(int, input().split())
c, d = map(int, input().split())

1. String 字符串

函数名 说明
len(str) 获取字符串的长度
s.split(str, num) str为分隔符。默认为空字符,如空格、换行符等。num为分割次数。默认为-1,表示分割所有。
s.join(seq) s作为连接符,将列表seq连接在一起
# split()
str = "aaa bbb ccc"
print(str.split())
# 输出为['aaa', 'bbb', 'ccc']
# join()
seq = ["aa", "bb", "cc"]
print(" ".join(seq))
# 输出为'aa bb cc'

2. list 列表

初始化

# 一维数组
arr = [0 for _ range(n)]
# 二维数组
matrix = [[0 for _ in range(j)] for _ in range(i)]
函数名 说明
len(list) 获取list的长度
list.append(obj) 在列表末尾添加新的对象
list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj) 移除列表中某个值的第一个匹配项
list.count(obj) 统计obj在列表中出现的次数
list.reverse() 反转列表
list.sort(cmp=None, key=None, reverse=False) reverse=False表示升序

3. dict 字典

dict能提供 key-value 映射,作用类似于Java中的map。

注意

  1. key必须是不可变的,如数字、元组、字符串。不可以为列表。
  2. 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
# 创建字典
tinyDict = {'a': 1, 'b': 2, 'b':3}
# {'a': 1, 'b': '3'}
# 增加条目、修改条目
tinyDict['d'] = 4
# 删除条目
del tinyDict['d']
# 删除字典
del tinyDict
函数名 说明
len(d) 计算字典元素个数,即键的总数。
d.clear() 清空字典
d.keys() 以列表返回字典中的所有键
d.values() 以列表返回字典中的所有值

defaultdict

defaultdict与普通字典的区别:

  • 当你尝试访问或修改一个不存在的键时,defaultdict会自动为该键创建并生成一个默认值。

如下所示,创建了一个键为数字,值为列表的字典。然后可以直接通过map[1].append()对列表进行操作。

from collections import defaultdict

map = defaultdict(list)
map[1].append(2)

4. set 集合

创建集合

# 创建空集合
set1 = set()
# 用列表创建集合
set2 = set([1,1,2,3])
# set2 = {1,2,3}

使用in判断元素是否在集合中

if x in set1:
    pass
函数名 说明
s.add(obj) 添加元素
len(s) 获取集合的长度
s.remove(obj) 删除元素,如果不存在该元素,会报错
s.discard(obj) 删除元素,如果不存在该元素,不会报错
s.clear() 清空集合
s.intersection(s1, s2, s3, ...) 返回s,s1,s2,...的交集
s.union(s1, s2, ...) 返回s,s1,s2,...的并集

5. 队列

heapq 优先队列(堆队列,小根堆)

python3 中的 heapq 实现的是小根堆,即父节点小于子节点。
如果要实现大根堆,需要对每个元素乘上-1,这样元素越大,负数越小,位于对的顶端。

import heapq
pq = []
heapq.heappush(pq, item)
函数名 说明 时间复杂度
heapq.heappush(pq, item) 向堆中添加item \(O(logn)\)
item = heapq.heappop(pq) 弹出堆顶元素,即堆中的最小值 \(O(logn)\)
heapq.heapify(pq) 将列表pq转转化为小根堆 \(O(n)\)

不同item的比较方式

  • 元组:堆会根据元组的第一个元素进行排序。如果第一个元素相等,则会比较第二个元素,依此类推。这是因为元组的比较是逐元素进行的
  • 类对象:如果item为对象,确保类中实现了__lt__方法(小于比较),来指定排序的规则。
import heapq

class MyObject:
    def __init__(self, priority, value):
        self.priority = priority
        self.value = value

    def __lt__(self, other):
        return self.priority < other.priority  # 根据 priority 进行比较
    
# 创建一个空堆
heap = []
# 添加对象到堆中
heapq.heappush(heap, MyObject(1, 'A'))
heapq.heappush(heap, MyObject(3, 'B'))
heapq.heappush(heap, MyObject(2, 'C'))
# >>> [(1, 'A'), (2, 'C'), (3, 'B')]
posted @ 2024-10-27 16:04  Frank23  阅读(5)  评论(0编辑  收藏  举报