大家好,欢迎来到今天的编程干货时间!🚀
在编程世界中,数据结构就像建筑师的蓝图,决定了程序如何组织和处理数据。Python提供了强大而优雅的内置数据结构,让数据处理变得简单高效。今天,我们将深入探索Python五大核心数据结构。
📦 五大核心数据结构速览
1. 字符串(str):文本的基本容器
字符串是由0个或多个字符组成的不可变序列,用引号(单引号、双引号、三引号)表示
(1)创建方式
# 1. 单引号创建str1 = 'Hello Python'# 2. 双引号创建(支持单引号内容)str2 = "Python"# 3. 三引号创建(多行字符串)str3 = '''这是一个多行字符串可以跨行显示'''# 4. str()函数转换str4 = str(123) # 数字转字符串str5 = str([1, 2, 3]) # 列表转字符串
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的奇数
# 创建与操作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() # 空元组
# 访问元素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()) # 获取值的集合
# 基本操作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) # 初始化计数器
# 创建字典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数据处理的半壁江山!
💬 互动话题:你在实际编程中最常用哪种数据结构?遇到过什么有趣的问题?欢迎在评论区分享!
🔍 学完这篇,然后呢?
恭喜你完成了五大基础数据结构的学习!但这只是第一步。真正的高手,还需要深入理解它们的底层特性,学会在不同场景下选择最合适的工具。
在下一篇文章中,我们将深入探讨:
✅ 四大核心特性深度解析
有序性:哪些数据结构真的有序?
可变性:不可变类型有什么优势?
重复元素:何时允许重复,何时自动去重?
访问方式:索引、键、遍历的区别与选择
✅ 五大实战应用场景
学生成绩管理系统(字典+列表的黄金组合)
商品库存管理(字典+集合的完美配合)
配置文件处理、数据去重、关系运算...
✅ 黄金选择法则
一张流程图帮你快速决策
性能对比表(查找速度、内存占用、线程安全)
常见陷阱与避坑指南
✅ 数据容器转换技巧
字符串↔列表↔元组↔集合↔字典互转
保持顺序的去重技巧
嵌套数据扁平化处理