数据结构算法——python数据结构

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
相关推荐
马优晨10 分钟前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
玉鸯1 小时前
Agent Hook:在概率推理之上,为 Agent 叠加确定性控制
python·langchain·agent
weixin_446260851 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
我的xiaodoujiao2 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区2 小时前
怎么把C语言学到精通?
c语言·开发语言
qetfw2 小时前
MXU:Tauri 2 + React 的 MaaFramework 跨平台 GUI 源码
前端·python·react.js·前端框架·开源项目·效率工具
心平气和量大福大3 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai3 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
用户8356290780513 小时前
Python 实现 Excel 页面布局与打印设置自动化
后端·python