python数据结构
常用数据结构
字符串
python
s = "hello python"
# 基础操作
print(s[0]) # 索引
print(s[1:5]) # 切片
print(len(s)) # 长度
print(s.strip()) # 去空格
print(s.split(" ")) # 分割
print(s.upper()) # 大写
print(s.lower()) # 小写
# 遍历
for char in s:
print("字符:", char)
元组tuple
python
t = (1, 2, 3, "a", "b")
# 基础操作
print(t[0])
print(t.count(2))
print(t.index("a"))
print(len(t))
# 拆包
a, b, c = (1, 2, 3)
# 遍历
for item in t:
print("元组元素:", item)
列表list
python
lst = [10, 20, 30, 40]
# 增删改查
lst.append(50)
lst.pop()
lst[1] = 15
lst.insert(0, 0)
# 排序
lst.sort()
# 遍历
for num in lst:
print("列表元素:", num)
# 带下标遍历
for idx, num in enumerate(lst):
print(idx, num)
栈
python
stack = [1, 2, 3]
# 入栈、出栈
stack.append(4)
stack.pop()
stack[-1]
len(stack)
# 遍历
for val in stack:
print("栈元素:", val)
队列
python
from collections import deque
q = deque([1, 2, 3]) # 用list初始化
# 入队、出队
q.append(4)
q.popleft()
q[0]
len(q)
# 遍历
for val in q:
print("队列元素:", val)
双向队列
python
from collections import deque
dq = deque([1, 2, 3])
# 两端操作
dq.append(4) # 右侧入队
dq.appendleft(0) # 左侧入队
dq.pop() # 右侧出队
dq.popleft() # 左侧出队
len(dq)
# 遍历
for val in dq:
print("双向队列元素:", val)
优先队列
python
import heapq
pq = []
# 入堆
heapq.heappush(pq, 3)
heapq.heappush(pq, 1)
heapq.heappush(pq, 2)
# 出堆
heapq.heappop(pq)
# 遍历(堆结构遍历,不保证有序)
for val in pq:
print("优先队列内部元素:", val)
# 已有列表初始化最小堆
nums = [5, 2, 8, 1, 3, 7, 4]
pq = heapq.heapify(nums)
# 堆顶
print(nums[0])
# 从小到大的顺序
sorted_nums = []
while nums:
sorted_nums .append(heapq.heappop(nums))
# 实际应用:找前 K 个最小的元素
nums = [9, 3, 7, 1, 5, 8, 2, 6, 4]
# 返回最小的 K 个元素
ns = heapq.nsmallest(3, nums)
# 返回最大的 K 个元素
nl = heapq.nlargest(3, nums)
字典
python
d = {"name": "小明", "age": 18, "city": "北京"}
# 增删改查
d["gender"] = "男"
d["age"] = 20
del d["city"]
d["city"]
len(d)
print("name" in d)
# 遍历键
for k in d.keys():
print("键:", k)
# 遍历值
for v in d.values():
print("值:", v)
# 遍历键值对
for k, v in d.items():
print(k, ":", v)
# 频率统计
text = "hello world"
freq = {}
for ch in text:
# 如果 ch 不在字典中,get 返回 0,加 1 后就是 1
freq[ch] = freq.get(ch, 0) + 1
集合
python
# 直接创建
s = {1, 2, 3, 4}
# 列表创建(自动去重)
nums = [1, 2, 2, 3, 3, 3]
sl = set(nums)
# 增删
s.add(5)
s.discard(2)
s.remove(2) # 不存在会报错
# 集合运算
a = {1,2,3}
b = {3,4,5}
print(a & b) # 交集
print(a | b) # 并集
print(a - b) # 差集
# 遍历
for val in s:
print("集合元素:", val)
| 数据结构 | 符号 / 实现 | 可变性 | 核心操作 | 遍历方式 |
|---|---|---|---|---|
| 字符串 | "" str |
不可变 | 索引、切片、split、strip、replace | for c in s |
| 元组 | () tuple |
不可变 | 索引、count、index | for item in t |
| 列表 | [] list |
可变 | append、pop、insert、sort、reverse | for item in lst |
| 栈 | list | 可变 | append、pop | for val in stack |
| 队列 | deque | 可变 | append、popleft | for val in q |
| 双向队列 | deque | 可变 | append、appendleft、pop、popleft | for val in dq |
| 优先队列 | heapq | 可变 | heappush、heappop | for val in pq |
| 字典 | {} dict |
可变 | [key]、get、keys、items、in | for k,v in d.items() |
| 集合 | {} set |
可变 | add、discard、remove、交并差、in | for val in s |