【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
相关推荐
金融小师妹1 天前
多因子智能推演:油价回落6%与黄金震荡上行的关联解析——AI预测框架
大数据·python·深度学习
坚持编程的菜鸟1 天前
模拟实现memmove
c语言·算法·模拟实现memmove
BUG研究员_1 天前
Runnable与LCEL
开发语言·人工智能·python
老马聊技术1 天前
Pytorch深度学习环境配置与测试
人工智能·pytorch·python
Python私教1 天前
AI Agent 上生产要不要开写权限?我把执行链拆成 4 道闸门
人工智能·后端·python
天才测试猿1 天前
软件测试知识总结(基础篇)
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
wabs6661 天前
关于图论【最短路径之Dijkstra算法(堆优化版)|卡码网47.参加科学大会的思考】
数据结构·算法·图论·优先级队列·邻接表·小顶堆·卡码网
云深处@1 天前
【数据库】MySQL 入门
数据库·学习·mysql
崔子末1 天前
某影视库剧集列表以及查询接口逆向
爬虫·python