字符串反转
使用切片反转
这种方法不修改原字符串(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() 常见于 PyTorch 和 NumPy ,它的作用是把只包含一个元素的张量或数组转换成一个 Python 原生数字类型 (比如 float、int、bool)
pytorch中:
eg:loss.item()
numpy中:
import numpy as np
arr = np.array([5.0]) #np.float64 类型的 NumPy 标量
val = arr.item() # 5.0,类型是 Python float