数据结构算法——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
相关推荐
Han_han9192 小时前
面向对象高级 继承(extends):
开发语言·python
前端老石人2 小时前
邂逅前端开发:从基础到实践的全景指南
开发语言·前端·html
白毛大侠2 小时前
Go Goroutine 与用户态是进程级
开发语言·后端·golang
ForteScarlet2 小时前
从 Kotlin 编译器 API 的变化开始: 2.3.20
android·开发语言·后端·ios·开源·kotlin
elseif1232 小时前
浅谈 C++ 学习
开发语言·c++·学习
华科大胡子2 小时前
Chrome安全机制深度解析
python
易标AI3 小时前
标书智能体(四)——提示词顺序优化,让缓存命中,输入成本直降10倍
人工智能·python·提示词·智能体·招投标
SuperEugene3 小时前
Vue3 性能优化规范:日常必做优化(不玄学、可落地)|可维护性与兜底规范篇
开发语言·前端·javascript·vue.js·性能优化·前端框架
Binary-Jeff3 小时前
Spring 创建 Bean 的关键流程
java·开发语言·前端·spring boot·后端·spring·学习方法