【Python】知识点零碎学习4

ord()函数

ord():以一个字符作为参数,返回ASCII码值

TypeError: unsupported operand type(s) for -: 'str' and 'str'

python不支持两个字符串直接做减法运算

例:

复制代码
ss[s[i]-'a']+=1#s[i]='b'

这样会报错,s[i] 是单个字符的字符串,'a' 也是字符串,python仅允许数字之间的减法。

正确的做法是: 先用 ord() 函数将字符转换为对应的 ASCII 码(整数),再做减法运算(比如 ord('a') 返回 97,ord('b') 返回 98

复制代码
ss[ord(s[i])-ord('a')]+=1

前缀和

前缀和的长度为n+1,第一个是s0=0


deque()

collections.deque()

可以在两端插入删除元素的队列

复制代码
deque=collections.deque()
deque.append(5)#在右端插入元素
deque.appendleft(5)#在左端插入元素
p=deque.pop(4)#在右端删除元素,并返回该值
p=deque.popleft(4)#在左端删除元素,并返回该值

Counter()

counter是字典的子类,key为待计数的元素, value为对应元素出现的次数 count。

虽然 Counter 中的 count 表示的是计数,但是 Counter 允许 count 的值为 0 或者负值。

如果在 Counter 中查找一个不存在的元素,不会产生异常,而是会返回 0

复制代码
from collections import Counter
a=Counter("chenkc")#Counter({'c': 2, 'h': 1, 'e': 1, 'n': 1, 'k': 1})

列表浅拷贝

python中"="对于列表来说是引用赋值,而不是创建新对象。新对象和原列表指向同一格内存对象。

指向不同对象的方法:

复制代码
new=old[:]
new=list(old)
new=copy.copy(old)

查询平均时间复杂度

列表:i in nums是O(n)时间复杂度

集合:i in nums是O(1)时间复杂度

字典:i in dic是查键,O(1)时间复杂度;i in dic.values()是查值,O(n)时间复杂度

元组:i in tup是O(n)时间复杂度


二维列表初始化

错误样例:[[值]*列数]*行数 初始化,但这会导致所有行指向同一个列表对象,修改任意一行的元素,其他行都会同步变化。

复制代码
# 试图初始化一个2行3列的二维列表,元素全为0
wrong_2d = [[0] * 3] * 2
print("初始化后:", wrong_2d)  # 输出: [[0, 0, 0], [0, 0, 0]]

# 修改第一行第一个元素
wrong_2d[0][0] = 1
print("修改后:", wrong_2d)  # 输出: [[1, 0, 0], [1, 0, 0]] → 第二行也被改了!

正确:

嵌套

复制代码
rows = 2
cols = 3
correct_2d = [[0 for _ in range(cols)] for _ in range(rows)]
print("初始化后:", correct_2d)  # [[0, 0, 0], [0, 0, 0]]

二分查找

bisect_left是在已排序的列表中找到指定元素的位置,返回第一个大于等于该元素的索引,保证能让目标元素插入后仍保持列表有序的位置。

bisect和bisect_right的功能一样,返回第一个大于该元素的索引

是基于二分查找算法实现的(时间复杂度 O (log n))

复制代码
bisect.bisect_left(a, x, lo=0, hi=len(a))
  • a:必须是升序排列的列表;
  • x:要查找 / 插入的目标元素;
  • lo(可选):查找的起始位置,默认 0;
  • hi(可选):查找的结束位置,默认列表长度。
相关推荐
凤凰院凶涛QAQ9 小时前
《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”
java·数据结构·算法
w_zero_one11 小时前
算法--模拟
java·数据结构·算法
外收内放11 小时前
面向对象高级(实战案例)
开发语言·python·学习
秋天的怀念_David11 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
专业程序开发源11 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
FPGA小迷弟11 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
卷无止境11 小时前
面向arm64桌面客户端开发全景:语言、框架与生态
后端·python
秋天的怀念_David12 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
薛定e的猫咪12 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
fanruitian12 小时前
python else用法
开发语言·python