Python 数据容器:组织和管理数据

Rs知识库 · Python 零基础入门系列 · 第三篇
前两篇我们学会了变量、条件判断和循环。但变量只能存一个值——如果要把全班同学的成绩、超市的商品清单、通讯录里的联系人管理起来呢?这一篇我们来学习 Python 的四大数据容器:列表、元组、字典、集合,并用它们做一个「超市购物清单管理器」。
本文目录
①四种数据容器怎么选?
②列表 List:增删改查与切片
③列表推导式:一行搞定
④字典 Dict:键值对存储
⑤元组、集合与字符串进阶
⑥实战项目:超市购物清单管理器
四种数据容器怎么选?
变量只能存一个值,但实际中我们经常需要管理一堆数据。Python 提供了四种容器,各有不同用途。记住这个选择口诀:要排序用列表,不能改用元组,要查键找值用字典,要去重用集合。
列表 List [ ]
有序、可改、允许重复。最常用的容器。
[1, 2, 3]
元组 Tuple ( )
有序、不可改。保护不允许被修改的数据。
(3, 5)
字典 Dict { }
键值对存储,像电话簿一样按名字查号码。
{"name": "小明"}
集合 Set { }
无序、自动去重。适合标签、交集运算。
{"Python", "编程"}
列表 List:增删改查与切片
列表是 Python 中最常用的数据容器。用方括号 [] 创建,里面的元素按顺序排列,每个元素有一个从 0 开始的索引号。
fruits = ["苹果", "香蕉", "橘子", "葡萄"]# 查:用索引取值(从 0 开始)print(fruits[0]) # 苹果print(fruits[-1]) # 葡萄(倒数第一个)# 增:append 末尾添加,insert 指定位置fruits.append("西瓜")fruits.insert(1, "芒果")# 删:remove 按值删,pop 按索引删fruits.remove("香蕉")fruits.pop() # 删除最后一个# 改:用索引直接修改fruits[0] = "红富士"# 切片:取一段子列表 [起始:结束]print(fruits[1:3]) # 索引 1 和 2(不含 3)
切片是 Python 的一大特色。list[a:b] 取索引 a 到 b-1 的元素,list[:3] 取前 3 个,list[2:] 从第 3 个取到最后。
列表常用内置函数
len(list) 长度
max/min(list) 最值
sorted(list) 排序
x in list 是否包含
列表推导式:一行搞定
列表推导式是 Python 最优雅的语法之一,能用一行代码创建或筛选列表。对比一下传统写法和推导式写法:
# 传统写法:生成 1~10 的平方squares = []for i inrange(1, 11): squares.append(i ** 2)# 列表推导式:一行搞定!squares = [i ** 2for i inrange(1, 11)]# 加条件筛选:只要偶数的平方even_sq = [i ** 2for i inrange(1, 11) if i % 2 == 0]# 快速算总价cart = [{"price": 8.5}, {"price": 5.0}, {"price": 12.0}]total = sum(item["price"] for item in cart)
💡 推导式的固定格式:[表达式 for 变量 in 可迭代对象 if 条件]。其中 if 条件可选。掌握这个模式,很多 for 循环都能简化成一行。
字典 Dict:键值对存储
字典就像一本电话簿——你通过名字(键)找到对应的电话号码(值)。用花括号 {} 创建,键和值之间用冒号分隔。
scores = {"语文": 90, "数学": 95, "英语": 88}# 查:用键取值print(scores["数学"]) # 95print(scores.get("物理", 0)) # 0(键不存在时返回默认值)# 增/改:直接用键赋值scores["物理"] = 92# 新增scores["语文"] = 93# 修改# 删del scores["英语"]# 遍历:同时获取键和值for subject, score in scores.items():print(f"{subject}:{score} 分")
🎯 字典 + 列表是实际编程中最常见的组合。比如一个商品可以用字典表示 {"name": "牛奶", "price": 8.5},然后用列表存放多个商品——这就是后面购物清单的核心结构。
元组、集合与字符串进阶
除了列表和字典,还有两种容器需要了解:
元组 Tuple
创建后不能修改,适合存储不应被改变的数据(如坐标、配置)。
point = (3, 5)x, y = point # 解包
集合 Set
自动去重,支持交集、并集、差集运算。
tags = {"Py", "编程", "Py"}# 结果只有 2 个元素
字符串进阶方法:字符串本身也可以像列表一样用索引和切片,此外还有很多实用方法:
text = " Hello, Python World! "print(text.strip()) # 去首尾空格print(text.strip().split(",")) # 按逗号拆成列表print(text.replace("World", "世界")) # 替换# join:用指定字符连接列表words = ["Python", "is", "fun"]print(" ".join(words)) # "Python is fun"
实战项目:超市购物清单管理器
我们来做一个命令行版的购物清单:支持添加商品、删除商品、修改数量、查看清单和自动计算总价。数据结构用字典嵌套列表——每个商品是一个字典,所有商品放在一个列表里。
字典嵌套列表列表推导式统计字符串格式化账单集合去重校验
# 超市购物清单管理器cart = []defadd_item(name, qty, price):"""添加商品,已有则增加数量"""for item in cart:if item["name"] == name: item["qty"] += qtyprint(f"已更新 {name},数量:{item['qty']}")return cart.append({"name": name, "qty": qty, "price": price})print(f"已添加:{name} x{qty}")defremove_item(name):"""删除商品"""for item in cart:if item["name"] == name: cart.remove(item)print(f"已删除:{name}")returnprint(f"未找到商品:{name}")defshow_cart():"""显示购物清单"""ifnot cart:print("购物车为空")return total = 0print(f"\n{'='*35}")print(" 🛒 购物清单")print(f"{'='*35}")for item in cart: sub = item["qty"] * item["price"] total += subprint(f" {item['name']:8s} x{item['qty']} ¥{sub:.2f}")print(f"{'─'*35}")print(f" 共 {len(cart)} 件商品,总计 ¥{total:.2f}")print(f"{'='*35}\n")# 主程序add_item("牛奶", 2, 8.5)add_item("面包", 1, 5.0)add_item("牛奶", 3, 8.5) # 已有,数量+3show_cart()
💡 关键设计思路
数据结构:每个商品是一个字典 {"name": "牛奶", "qty": 2, "price": 8.5},购物车是所有商品的列表。
添加逻辑:先遍历购物车看是否已有同名商品,有则增加数量,没有则新增一条记录。
格式化输出:f"{'='*35}" 用字符串重复生成分割线,{total:.2f} 保留两位小数。
动手练习
1
随机数统计简单
创建包含 10 个随机数的列表,找出最大值、最小值和平均值。
2
通讯录系统中等
用字典实现通讯录:支持添加联系人(姓名→电话)、按姓名查询、列出所有人。
3
词频统计器挑战
输入一段英文文本,用 split() 拆分,用字典统计每个单词出现的次数。
总结与下一步
掌握了数据容器,你就能管理真正有意义的数据了。在这篇文章中,你学会了:
●四种数据容器的特点和适用场景
●列表的增删改查、切片和排序操作
●列表推导式一行代码完成创建和筛选
●字典的键值对操作和字典+列表的组合模式
●完成了一个购物清单管理器,综合运用所有容器
下一篇预告
函数——代码复用的艺术。你将学会用 def 定义函数、理解参数传递和返回值、掌握作用域规则,用高阶函数 map/filter/sorted 写出更优雅的代码。
def 定义函数参数与返回值Lambda 匿名函数map/filter
Rs知识库 · Python 零基础入门系列
觉得有用?点个「在看」支持一下 👇