【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 小时前
【NLP】第八章:项目实操案例:文本情感分析
人工智能·python·深度学习·算法·自然语言处理
Fuly10242 小时前
LangGraph学习-(1)跑通一个最小状态图
数据库·学习
段一凡-华北理工大学2 小时前
工业领域的Hadoop架构学习~系列文章19:能源行业Hadoop应用实践
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁
syagain_zsx2 小时前
Linux进程控制学习总结(1/2)
linux·运维·学习
Java面试题总结2 小时前
Python 文件基本操作
大数据·人工智能·python
buxiangshui_cd2 小时前
Conda命令
开发语言·python·conda
MartinYeung52 小时前
[论文学习]差分隐私在机器学习中的演进:从符号式AI到大型语言模型
人工智能·学习
如竟没有火炬2 小时前
恢复二叉搜索树
数据结构·数据库·python·leetcode·动态规划
踏着七彩祥云的小丑2 小时前
Go学习第2天:程序结构+基础语法+数据类型
开发语言·学习·golang·go