本文目录导读:

我来为你详细介绍Python中常用的遍历算法案例,这些是处理数据的基础操作。
线性遍历(顺序遍历)
数组遍历
# 基本数组遍历
arr = [1, 2, 3, 4, 5]
# 方法1:直接遍历
for item in arr:
print(item, end=' ') # 输出: 1 2 3 4 5
# 方法2:索引遍历
for i in range(len(arr)):
print(f"索引{i}: {arr[i]}")
# 方法3:枚举遍历
for index, value in enumerate(arr):
print(f"位置{index}: {value}")
链表遍历
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
# 创建链表: 1 -> 2 -> 3
head = ListNode(1, ListNode(2, ListNode(3)))
# 遍历链表
current = head
while current:
print(current.val, end=' ') # 输出: 1 2 3
current = current.next
二维数据遍历
矩阵遍历
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 逐行遍历
print("逐行遍历:")
for row in matrix:
for element in row:
print(element, end=' ')
print()
# 逐列遍历
print("\n逐列遍历:")
for col in range(len(matrix[0])):
for row in range(len(matrix)):
print(matrix[row][col], end=' ')
print()
# 对角线遍历
print("\n对角线遍历:")
for i in range(len(matrix)):
print(matrix[i][i], end=' ') # 输出: 1 5 9
树结构遍历
二叉树遍历
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 创建二叉树:
# 1
# / \
# 2 3
# / \
# 4 5
root = TreeNode(1,
TreeNode(2, TreeNode(4), TreeNode(5)),
TreeNode(3))
# 前序遍历(根-左-右)
def preorder(node):
if node:
print(node.val, end=' ')
preorder(node.left)
preorder(node.right)
print("前序遍历:")
preorder(root) # 输出: 1 2 4 5 3
# 中序遍历(左-根-右)
def inorder(node):
if node:
inorder(node.left)
print(node.val, end=' ')
inorder(node.right)
print("\n中序遍历:")
inorder(root) # 输出: 4 2 5 1 3
# 后序遍历(左-右-根)
def postorder(node):
if node:
postorder(node.left)
postorder(node.right)
print(node.val, end=' ')
print("\n后序遍历:")
postorder(root) # 输出: 4 5 2 3 1
广度优先遍历(层序遍历)
from collections import deque
def level_order(root):
if not root:
return []
result = []
queue = deque([root])
while queue:
level_size = len(queue)
current_level = []
for _ in range(level_size):
node = queue.popleft()
current_level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(current_level)
return result
print("层序遍历:", level_order(root)) # 输出: [[1], [2, 3], [4, 5]]
图结构遍历
深度优先搜索 (DFS)
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E']
}
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(start, end=' ')
for neighbor in graph[start]:
if neighbor not in visited:
dfs(graph, neighbor, visited)
print("DFS遍历:")
dfs(graph, 'A') # 输出: A B D E F C
广度优先搜索 (BFS)
from collections import deque
def bfs(graph, start):
visited = {start}
queue = deque([start])
while queue:
vertex = queue.popleft()
print(vertex, end=' ')
for neighbor in graph[vertex]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
print("BFS遍历:")
bfs(graph, 'A') # 输出: A B C D E F
高级遍历技巧
带条件的过滤遍历
# 遍历并过滤
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 只遍历偶数
even_numbers = [num for num in numbers if num % 2 == 0]
print("偶数:", even_numbers) # 输出: [2, 4, 6, 8, 10]
# 带条件的累加
sum_of_large = sum(num for num in numbers if num > 5)
print("大于5的和:", sum_of_large) # 输出: 40
并行遍历多个序列
# 使用zip并行遍历
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 92, 78]
grades = ['B', 'A', 'C']
for name, score, grade in zip(names, scores, grades):
print(f"{name}: {score}分, 等级{grade}")
反向遍历
# 反向遍历
arr = [1, 2, 3, 4, 5]
# 方法1:reversed()
for item in reversed(arr):
print(item, end=' ') # 输出: 5 4 3 2 1
print()
# 方法2:负步长
for i in range(len(arr)-1, -1, -1):
print(arr[i], end=' ') # 输出: 5 4 3 2 1
实际应用案例
文件系统遍历
import os
def walk_directory(path):
"""遍历目录结构"""
for root, dirs, files in os.walk(path):
level = root.replace(path, '').count(os.sep)
indent = ' ' * 4 * level
print(f'{indent}{os.path.basename(root)}/')
subindent = ' ' * 4 * (level + 1)
for file in files:
print(f'{subindent}{file}')
# 使用示例
# walk_directory('./') # 遍历当前目录
JSON数据遍历
def traverse_json(data, indent=0):
"""递归遍历JSON结构"""
prefix = ' ' * indent
if isinstance(data, dict):
for key, value in data.items():
print(f"{prefix}{key}:", end=' ')
if isinstance(value, (dict, list)):
print()
traverse_json(value, indent + 2)
else:
print(value)
elif isinstance(data, list):
for index, item in enumerate(data):
print(f"{prefix}[{index}]:", end=' ')
if isinstance(item, (dict, list)):
print()
traverse_json(item, indent + 2)
else:
print(item)
# 示例数据
data = {
"name": "产品目录",
"items": [
{"id": 1, "name": "手机", "price": 2999},
{"id": 2, "name": "电脑", "price": 5999}
],
"metadata": {
"version": "1.0",
"updated": "2024-01-01"
}
}
print("JSON遍历:")
traverse_json(data)
这些遍历算法覆盖了Python中常见的数据结构操作,通过灵活运用这些方法,你可以高效地处理各种类型的数据,选择哪种遍历方式取决于你的具体需求和数据结构的特性。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播