Python 内置数据结构详解与应用示例
序列类型的切片处理
在 Python 中,元组、列表和字符串均属于序列类型,支持通过索引和切片进行灵活访问。特别是切片语法 [start:end:step],结合负数步长可以实现快速逆序。
# 定义一个包含中文的乱序字符串
source_text = "黑来马程员序,月过万金,Python学"
# 方案一:先整体倒序,再截取目标片段
# 逻辑:全量反转 -> 获取新范围
result_1 = source_text[::-1][9:14]
print(f"方案一结果: {result_1}")
# 方案二:先定位正序切片,再进行局部倒序
# 逻辑:定位原区间 -> 该区段内反转
result_2 = source_text[5:10][::-1]
print(f"方案二结果: {result_2}")
# 方案三:利用分隔符拆分后取元素
# 逻辑:按逗号分割 -> 取第二个部分 -> 切前五位 -> 反转
parts = source_text.split(",")
result_3 = parts[1][0:5][::-1]
print(f"方案三结果: {result_3}")
# 方案四:结合替换与反转去除特定字符
# 逻辑:分割 -> 去除指定字 -> 整体反转
cleaned = parts[1].replace("金", "")
result_4 = cleaned[::-1]
print(f"方案四结果: {result_4}")映射类型:字典的基本用法
字典通过键(Key)存储值(Value),查找效率较高。访问数据时直接使用方括号或 get 方法即可。
config = {"host": "127.0.0.1", "port": 8080}
# 通过 key 直接获取对应 value
server_ip = config["host"]
print(f"服务器地址: {server_ip}")综合场景:列表嵌套与随机分配
实际开发中常遇到需要将一组数据随机分散到多个桶中的需求,利用列表嵌套配合随机模块可实现此功能。
import random
# 原始数据池
data_pool = ['Node-A', 'Node-B', 'Node-C', 'Node-D', 'Node-E']
# 三个任务队列
task_queues = [[], [], []]
for item in data_pool:
# 随机选择一个队列索引 (0, 1, 或 2)
target_index = random.randint(0, 2)
task_queues[target_index].append(item)
# 输出分配后的结构
print("分配结果:", task_queues)容器的通用属性与转换操作
Python 的序列和集合对象拥有许多共通的内置函数,如求极值、计算长度、类型转换及排序等。以下代码演示了五种主要容器的统一操作接口。
# 初始化不同类型的数据容器
numeric_list = [10, 5, 8, 15, 3] # 列表
immutable_tup = (10, 5, 8, 15) # 元组
unique_set = {10, 5, 8, 10, 15} # 集合 (自动去重)
text_string = "pythontest" # 字符串
mapping_dict = {"id": 1, "name": "test"} # 字典
# --- 1. 遍历输出 ---
def traverse(container, name):
print(f"--- 遍历 {name} ---")
if isinstance(container, dict):
for k in container:
print(f"Key: {k}, Value: {container[k]}")
else:
for item in container:
print(item)
traverse(numeric_list, "列表")
traverse(immutable_tup, "元组")
traverse(unique_set, "集合")
traverse(text_string, "字符串")
traverse(mapping_dict, "字典")
# --- 2. 统计特征 (最大/最小/长度) ---
print("\n--- 统计信息 ---")
# 字典的最大/最小值默认比较 Key
print(f"列表最大值: {max(numeric_list)}, 最小值: {min(numeric_list)}")
print(f"集合唯一值数量: {len(unique_set)}")
print(f"字典键的最大值: {max(mapping_dict)}")
# --- 3. 类型强制转换 ---
print("\n--- 类型转换示例 ---")
print(f"元组转列表: {list(immutable_tup)}")
print(f"集合转元组: {tuple(unique_set)}")
print(f"列表转集合(去重): {set(numeric_list)}")
print(f"字典转列表(仅取键): {list(mapping_dict.keys())}")
# --- 4. 排序操作 ---
print("\n--- 排序结果 ---")
# sorted 函数返回新的列表,不影响原数据
print(f"列表升序: {sorted(numeric_list)}")
print(f"列表降序: {sorted(numeric_list, reverse=True)}")
# 字符串按 ASCII 码排序
print(f"字符串排序: {sorted(text_string)}")
# 字典排序基于 Key
print(f"字典按键升序: {sorted(mapping_dict)}")