当前位置:首页>python>Python程序员必会!五大核心数据结构,一篇带你通关!

Python程序员必会!五大核心数据结构,一篇带你通关!

  • 2026-10-06 13:03:34
Python程序员必会!五大核心数据结构,一篇带你通关!

大家好,欢迎来到今天的编程干货时间!🚀

在编程世界中,数据结构就像建筑师的蓝图,决定了程序如何组织和处理数据。Python提供了强大而优雅的内置数据结构,让数据处理变得简单高效。今天,我们将深入探索Python五大核心数据结构。


📦 五大核心数据结构速览

数据结构
关键字
可变性
有序性
唯一性
适用场景
字符串
str
❌ 不可变
✅ 有序
❌ 可重复
文本处理
列表
list
✅ 可变
✅ 有序
❌ 可重复
动态数据集合
元组
tuple
❌ 不可变
✅ 有序
❌ 可重复
固定数据记录
集合
set
✅ 可变
❌ 无序
✅ 唯一
去重、关系运算
字典
dict
✅ 可变
✅ 有序(3.7+)
✅ Key唯一
键值映射

1. 字符串(str):文本的基本容器

字符串是由0个或多个字符组成的不可变序列,用引号(单引号、双引号、三引号)表示

(1)创建方式

# 1. 单引号创建str1 = 'Hello Python'# 2. 双引号创建(支持单引号内容)str2 = "Python"# 3. 三引号创建(多行字符串)str3 = '''这是一个多行字符串可以跨行显示'''# 4. str()函数转换str4 = str(123)           # 数字转字符串str5 = str([1, 2, 3])     # 列表转字符串
(2)字符串的常用方法
text = " Python!"print(text[1:7])           # Python - 切片操作print(len(text))            # 8 - 获取长度# 常用字符串方法print(text.strip())          # 去空格 -> "Python!"print(text.upper())          # 转大写 -> " PYTHON!"print(text.replace("Python", "Java"))  # 替换  -> " Java!"
特点:不可变、有序、支持索引和切片

2. 列表(list):灵活的数据序列

列表是Python中最常用的数据结构之一,可以存储任意类型的元素

(1)创建方式

# 1. 直接使用方括号list1 = [1, 2, 3, 4, 5]list2 = ["苹果", "香蕉", "橙子"]list3 = [1, "Python", True, 3.14]  # 混合类型# 2. 使用list()函数list4 = list("Python")        # 字符串转列表list5 = list((1, 2, 3))       # 元组转列表list6 = list({1, 2, 3})       # 集合转列表# 3. 列表推导式list7 = [x for x in range(10)]           # 0-9list8 = [x**2 for x in range(5)]         # 平方数list9 = [x for x in range(20) if x%2==0] # 偶数# 4. 使用*运算符重复list10 = [0] * 5              # [0, 0, 0, 0, 0]list11 = ["hello"] * 3        # ["hello", "hello", "hello"]# 5. 使用range()和生成器list12 = list(range(10))          # 0-9list13 = list(range(1, 11))       # 1-10list14 = list(range(1, 20, 2))    # 1-19的奇数
(2)列表的常用方法
# 创建与操作fruits = ["苹果", "香蕉", "橙子"]numbers = [1, 2, 3, 4, 5]mixed = ["Python", 3.9, True]  # 支持混合类型# 动态修改fruits.append("葡萄")      # 添加print(fruits)  # ['苹果', '香蕉', '橙子', '葡萄']fruits.insert(1, "芒果")   # 插入print(fruits)  # ['苹果', '芒果', '香蕉', '橙子', '葡萄']fruits.remove("香蕉")      # 删除print(fruits)  # ['苹果', '芒果', '橙子', '葡萄']fruits[0] = "红富士苹果"   # 修改print(fruits)  # ['红富士苹果', '芒果', '橙子', '葡萄']# 列表推导式squares = [x**2 for x in range(10)]print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

特点:可变、有序、可包含不同类型元素

3. 元组(tuple):不可变的列表

元组与列表类似,但创建后不能修改

(1)创建方式

# 1. 直接使用圆括号tuple1 = (1, 2, 3, 4)tuple2 = ("红", "绿", "蓝")tuple3 = (1, "hello", True)       # 混合类型# 2. 单个元素的元组(必须有逗号)single1 = (42,)single2 = ("Python",)# 3. 省略括号(逗号创建元组)tuple4 = 1, 2, 3                   # 自动转为元组tuple5 = "Python",                # 单个元素也需要逗号# 4. 使用tuple()函数tuple6 = tuple([1, 2, 3])         # 列表转元组tuple7 = tuple("Python")          # 字符串转元组tuple8 = tuple({1, 2, 3})         # 集合转元组# 5. 空元组创建empty1 = ()                        # 空元组empty2 = tuple()                   # 空元组
(2)元组的常用方法
# 访问元素coordinates = (10, 20)colors = ("红", "绿", "蓝")print(coordinates[0])  # 10print(colors[1:])      # ('绿', '蓝')# 解包操作x, y = coordinatesprint(f"坐标:X={x}, Y={y}")  # 坐标:X=10, Y=20# 元组不可变,以下操作会报错:# coordinates[0] = 15  # TypeError# 函数返回多个值def get_user():    return "张三", 25, "北京"name, age, city = get_user()print(name, age, city)  # 张三 25 北京

特点:不可变、有序、通常用于存储不应修改的数据

4. 集合(set):唯一元素的容器

集合存储不重复的元素,支持数学集合运算

(1)创建方式

# 1. 直接使用花括号set1 = {1, 2, 3, 4, 5}set2 = {"苹果", "香蕉", "橙子", "苹果"}  # 自动去重# 2. 使用set()函数set3 = set([1, 2, 3, 2, 1])       # 列表转集合set4 = set((1, 2, 3, 2, 1))       # 元组转集合set5 = set("banana")              # 字符串转集合# 3. 集合推导式set6 = {x for x in range(10)}                # 0-9set7 = {x**2 for x in range(5)}              # 平方数set8 = {x for x in range(20) if x % 3 == 0}  # 3的倍数# 4. 从字典键创建student = {"name": "张三", "age": 20, "score": 90}set9 = set(student)               # 获取键的集合set10 = set(student.values())     # 获取值的集合
(2)集合的常用方法
# 基本操作unique_numbers = {1, 2, 3, 3, 2, 1}print(unique_numbers)  # {1, 2, 3} - 自动去重# 集合运算set_a = {1, 2, 3, 4}set_b = {3, 4, 5, 6}print(set_a | set_b)  # 并集: {1, 2, 3, 4, 5, 6}print(set_a & set_b)  # 交集: {3, 4}print(set_a - set_b)  # 差集: {1, 2}print(set_a ^ set_b)  # 对称差集: {1, 2, 5, 6}# 集合方法numbers = {1, 2, 3}numbers.add(4)           # 添加元素numbers.remove(2)        # 删除元素(不存在会报错)numbers.discard(5)       # 删除元素(不存在不报错)print(len(numbers))      # 获取元素数量

特点:元素唯一、无序、支持集合运算

5. 字典(dict):键值对的映射

字典通过键来访问值,非常适合存储有对应关系的数据

(1)创建方式

# 1. 直接使用花括号dict1 = {"name": "张三", "age": 20, "city": "北京"}dict2 = {1: "one", 2: "two", 3: "three"}dict3 = {"scores": [85, 92, 78], "active": True}  # 复杂值# 2. 使用dict()构造函数dict4 = dict(name="李四", age=22)       # 关键字参数dict5 = dict([("a", 1), ("b", 2), ("c", 3)])  # 元组列表dict6 = dict(zip(["x", "y", "z"], [1, 2, 3]))  # zip组合# 3. 字典推导式dict7 = {x: x**2 for x in range(5)}               # 平方字典dict8 = {k: v for k, v in [("a", 1), ("b", 2)]}   # 转换dict9 = {chr(i+65): i for i in range(5)}          # A:0, B:1...# 4. fromkeys()方法创建默认值字典keys = ["name", "age", "city"]dict10 = dict.fromkeys(keys)                     # 值默认为Nonedict11 = dict.fromkeys(keys, "未知")             # 指定默认值dict12 = dict.fromkeys(range(5), 0)              # 初始化计数器
(2)字典的常用方法
# 创建字典student = {    "name": "张三",    "age": 18,    "grades": [85, 92, 78]}stationery = {"铅笔": 71, "钢笔": 59, "橡皮": 98, "尺子": 92}# 访问元素print(student["name"])      # "张三"print(stationery["铅笔"])   # 71# 修改字典student["age"] = 19         # 修改值student["major"] = "计算机科学"  # 添加新键值对stationery.pop("钢笔")       # 删除键值对# 遍历字典for key, value in stationery.items():    print(f"{key}: {value}")# 常用方法print(student.keys())       # 所有键print(student.values())     # 所有值print(student.get("name"))  # 安全获取值print("age" in student)     # 检查键是否存在

特点:键值对映射、键必须唯一且不可变、Python 3.7+保持插入顺序

💡 如何选择?一张流程图搞定

开始↓需要存储键值对吗?├─ 是 → 选择【字典】↓ 否需要保证元素唯一吗?├─ 是 → 选择【集合】↓ 否数据需要修改吗?├─ 是 → 选择【列表】↓ 否处理的是文本吗?├─ 是 → 选择【字符串】↓ 否选择【元组】

📊 性能小贴士

  • 查找速度:集合 ≈ 字典 > 列表 ≈ 元组 ≈ 字符串

  • 内存占用:根据数据量灵活选择,元组比列表更省内存

  • 线程安全:不可变类型(字符串、元组)在多线程环境下更安全

🔄 类型转换速查表

# 字符串 ↔ 列表list("Python")        # ['P','y','t','h','o','n']''.join(['P','y'])    # 'Py'# 列表 ↔ 集合(去重)set([1,2,2,3])        # {1,2,3}list({1,2,3})         # [1,2,3]# 两个列表 → 字典dict(zip(['name','age'], ['张三',20]))  # {'name':'张三','age':20}# 字典 → 列表list({"a":1, "b":2}.keys())    # ['a','b']list({"a":1, "b":2}.values())  # [1,2]

📌 总结

Python的五大内置数据结构:

  • 字符串 - 处理文本的专家

  • 列表 - 灵活多变的万能容器

  • 元组 - 安全可靠的数据保镖

  • 集合 - 去重和关系运算的高手

  • 字典 - 键值映射的艺术大师

掌握它们,你就掌握了Python数据处理的半壁江山!

💬 互动话题:你在实际编程中最常用哪种数据结构?遇到过什么有趣的问题?欢迎在评论区分享!


🔍 学完这篇,然后呢?

恭喜你完成了五大基础数据结构的学习!但这只是第一步。真正的高手,还需要深入理解它们的底层特性,学会在不同场景下选择最合适的工具。

在下一篇文章中,我们将深入探讨:

✅ 四大核心特性深度解析

  • 有序性:哪些数据结构真的有序?

  • 可变性:不可变类型有什么优势?

  • 重复元素:何时允许重复,何时自动去重?

  • 访问方式:索引、键、遍历的区别与选择

✅ 五大实战应用场景

  • 学生成绩管理系统(字典+列表的黄金组合)

  • 商品库存管理(字典+集合的完美配合)

  • 配置文件处理、数据去重、关系运算...

✅ 黄金选择法则

  • 一张流程图帮你快速决策

  • 性能对比表(查找速度、内存占用、线程安全)

  • 常见陷阱与避坑指南

✅ 数据容器转换技巧

  • 字符串↔列表↔元组↔集合↔字典互转

  • 保持顺序的去重技巧

  • 嵌套数据扁平化处理

最新文章

随机文章