【Python】知识点零碎学习7

字符串反转

使用切片反转

这种方法不修改原字符串(Python 字符串是不可变类型),而是返回一个新的反转后的字符串。

输出结果

复制代码
# 定义原始字符串
original_str = "Hello, Python!"

# 使用切片反转字符串 [起始:结束:步长],步长为-1表示从后往前取
reversed_str = original_str[::-1]

使用reversed()函数

reversed() 函数会返回一个反转的迭代器,需要结合 join() 方法将迭代器转换为字符串。

复制代码
# 定义原始字符串
original_str = "Hello, Python!"

# 使用reversed()反转,再用join()拼接
reversed_str = ''.join(reversed(original_str))

优先队列

不看插入顺序,只看优先级 。队列里的元素自带权重 / 大小,优先级最高的元素永远最先被取出

基于最小堆实现,出队是永远弹出堆顶的最小值,用标准库 heapq 实现。

入队出队时间复杂度O(log n)

复制代码
import heapq
heap=[]

# 入队:随意顺序插入
heapq.heappush(heap, 5)
heapq.heappush(heap, 2)
heapq.heappush(heap, 9)
heapq.heappush(heap, 1)
heapq.heappush(heap, 7)

print(heap)  # 内部堆结构:[1, 2, 9, 5, 7]
# 注意:列表**整体不是有序**!只有堆顶永远最小

#弹出元素:从小到大
print(heapq.heappop(heap))  # 1
print(heapq.heappop(heap))  # 2
print(heapq.heappop(heap))  # 5
print(heapq.heappop(heap))  # 7
print(heapq.heappop(heap))  # 9

heap 这个列表本身并不是排序好的数组!只有 ** 堆顶(下标 0)** 是全局最小值,内部其他元素无序。

堆顶永远是下标 0,所以如果想要获取堆顶但是不弹出heap[0]

快速建堆:heapq.heapify(),已有列表,直接一键转优先队列,时间复杂度 O (n)

复制代码
import heapq

nums = [5, 2, 9, 1, 7]
heapq.heapify(nums)  # 原地修改,直接变成堆结构

print(nums)  # [1, 2, 9, 5, 7]

PriorityQueue 是面向对象封装版;heapq 是原生底层工具。PriorityQueue 底层 100% 基于 heapq 实现。


判断是否是数字

判断单个字符是否为0-9阿拉伯数字:str.isdigit()

只看 0-9;不看负号、小数点;字符串长度大于 1 也能用,但只看整体是不是全数字字符

复制代码
print('5'.isdigit())

判断能否转成数字(包含整数、小数、负数):is_number()

通用万能方法:异常捕获 try-except

复制代码
def is_number(s):
    try:
        float(s)
        return True
    except:
        return False

print(is_number('123'))   # True
print(is_number('-123'))  # True
print(is_number('3.14'))   # True
print(is_number('-0.5'))   # True
print(is_number('abc'))    # False
print(is_number('12a'))    # False
print(is_number('.'))      # False

join

  • separator:分隔符,可以是空字符串 ''

  • iterable:元素必须都是字符串的可迭代对象(列表、元组、生成器等)。

  • 返回:将所有元素用 separator 连接而成的字符串。

    separator.join(iterable)

    "".join([1,2,3]*5)


列表的 += 和 append 的区别

append(对象):把传入的东西,当成一个整体元素塞进去;无论对象是什么,永远只增加一个元素

+= 可迭代对象:把里面元素拆开,挨个追加 **(等价 extend)**

复制代码
lst = [1,2]
lst.append("abc")
# [1, 2, 'abc']   字符串整体作为1个元素

lst = [1,2]
lst += "abc"
# [1, 2, 'a', 'b', 'c']   拆开每个字符加入

.item()

.item() 常见于 PyTorchNumPy ,它的作用是把只包含一个元素的张量或数组转换成一个 Python 原生数字类型 (比如 floatintbool

pytorch中:

eg:loss.item()

numpy中:

复制代码
import numpy as np

arr = np.array([5.0])   #np.float64 类型的 NumPy 标量
val = arr.item()        # 5.0,类型是 Python float
相关推荐
美团技术团队2 小时前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
ZhengEnCi7 小时前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi9 小时前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab
曲幽9 小时前
你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南
python·fastapi·web·graphql·route·cors·rest·strawberry
用户83580861879110 小时前
基于 Self-RAG 与列表级重排序的进阶 RAG 系统设计与实现
python
To_OC19 小时前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC20 小时前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK21 小时前
线段树维护区间 k 次方和
c++·数学·算法·stl
Warson_L1 天前
Python `Annotated` 与 LangGraph Reducer 学习笔记
python
韩师傅1 天前
海天线算法的前世今生
python·计算机视觉