购物清单和通讯录,Python最常用的数据结构
前几篇我们学了变量、条件、循环、函数——它们都是处理单个数据的。但真实世界里,数据总是”一堆一堆”的:购物清单上有10样东西,通讯录里存着200个联系人。Python用列表和字典来处理这类数据,掌握它们,你才算真正入门。
一、列表(list)— 你的购物清单
想象你去超市前写了一张购物清单:
shopping = ["牛奶", "面包", "鸡蛋", "苹果", "酱油"]
这就是一个列表——用方括号 [] 包裹,元素之间用逗号隔开。列表有三个特点:
- 有序:第一个是”牛奶”,最后一个是”酱油”,顺序不会变
- 可重复:可以买两瓶牛奶,
["牛奶", "牛奶", "面包"]完全合法 - 可修改:随时加东西、删东西、换东西
1.1 增:往清单里加东西
shopping = ["牛奶", "面包", "鸡蛋"]
shopping.append("苹果") # 在末尾追加
shopping.insert(1, "酸奶") # 在第2个位置插入
print(shopping) # ['牛奶', '酸奶', '面包', '鸡蛋', '苹果']
1.2 删:从清单里划掉
shopping.remove("面包") # 按名字删除
shopping.pop(0) # 按位置删除,并返回被删的元素
1.3 改:修改清单
shopping[0] = "脱脂酸奶" # 把第1项改成脱脂酸奶
1.4 查:看看清单上有什么
print(shopping[0]) # 第1项
print(shopping[-1]) # 最后一项(负数从末尾倒数)
print(len(shopping)) # 清单上有几样东西
print("鸡蛋" in shopping) # True(有没有鸡蛋?)
1.5 切片:取出清单的一部分
shopping = ["牛奶", "面包", "鸡蛋", "苹果", "酱油"]
print(shopping[1:3]) # ['面包', '鸡蛋'](第2到第3项)
print(shopping[:2]) # ['牛奶', '面包'](前2项)
print(shopping[2:]) # ['鸡蛋', '苹果', '酱油'](第3项到最后)
1.6 遍历:逐项检查清单
shopping = ["牛奶", "面包", "鸡蛋"]
for item in shopping:
print(f"✅ 已买:{item}")
1.7 列表推导式:批量处理的快捷方式
squares = [x ** 2 for x in range(1, 11)]
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
big = [x for x in squares if x > 25] # 筛选:只留大于25的
print(big) # [36, 49, 64, 81, 100]
一行代码 = 三行循环,这就是推导式的威力。
二、字典(dict)— 你的通讯录
列表用位置找数据(第几个),但通讯录不能靠”第几个联系人”来找人——你得用名字查电话。这就是字典:
contacts = {
"张三": "138-0000-1111",
"李四": "139-0000-2222",
"王五": "137-0000-3333"
}
字典用花括号 {} 包裹,每个元素是键:值对(key:value)。
- 键(key):就像通讯录里的姓名,必须唯一
- 值(value):就像电话号码,可以是任何数据
2.1 查:打电话给某人
print(contacts["张三"]) # 138-0000-1111
print(contacts.get("赵六", "未找到")) # 未找到(避免报错)
2.2 增:新存一个号码
contacts["赵六"] = "136-0000-4444"
2.3 改:号码换了
contacts["张三"] = "138-9999-1111" # 直接赋值就是修改
2.4 删:删除联系人
del contacts["李四"]
2.5 遍历:打印所有联系人
for name, phone in contacts.items():
print(f"📱 {name}: {phone}")
三、列表 vs 字典:一张表看清区别
| 特性 | 列表(list) | 字典(dict) |
|---|
|——|————-|————-|
| 语法 | ["a", "b", "c"] |
{"name": "张三"} |
|---|---|---|
| 访问方式 | 按位置索引 list[0] |
按键查找 dict["name"] |
| 有序性 | ✅ 有序 | ✅ 3.7+ 保持插入顺序 |
| 是否可重复 | ✅ 元素可重复 | ❌ 键必须唯一 |
| 适用场景 | 一组同类数据(购物清单) | 键值映射(通讯录、配置) |
| 增删改查 | append/remove/pop/[i] |
d[key]=val / del / .get() |
简单记法:要”排队”用列表,要”查字典”用字典。
四、实战:通讯录管理程序
把列表和字典结合起来,写一个真正能用的通讯录:
contacts = {}
while True:
print("n===== 通讯录 =====")
print("1. 添加联系人 2. 查找联系人")
print("3. 删除联系人 4. 显示全部 5. 退出")
choice = input("请选择操作 (1-5): ")
if choice == "1":
name = input("姓名: ")
phone = input("电话: ")
contacts[name] = phone
print(f"✅ 已添加 {name}")
elif choice == "2":
name = input("请输入要查找的姓名: ")
if name in contacts:
print(f"📱 {name}: {contacts[name]}")
else:
print("❌ 未找到该联系人")
elif choice == "3":
name = input("请输入要删除的姓名: ")
if name in contacts:
del contacts[name]
print(f"✅ 已删除 {name}")
else:
print("❌ 未找到该联系人")
elif choice == "4":
if not contacts:
print("📭 通讯录为空")
else:
for name, phone in contacts.items():
print(f" 📱 {name}: {phone}")
elif choice == "5":
print("👋 再见!")
break
这个小程序虽然只有30多行,但已经是一个完整的应用:用字典存储、用循环持续运行、用条件处理不同操作。这正是编程的魅力——把简单的积木搭出复杂的东西。
五、本篇小结
- 列表是有序的数据集合,适合存”一堆东西”
- 字典是键值对的数据集合,适合存”需要按名字查找的信息”
- 列表用位置访问,字典用键访问
- 两者都可以增删改查和遍历
- 列表推导式是快速创建列表的简洁语法
下篇预告
数据存到列表和字典里了,但程序一关数据就没了。下一篇《AI编程(九):文件操作 — 让数据”活”下来》,我们将学习如何把数据写入文件、从文件读取数据,让通讯录的内容在程序关闭后依然保留。
发表回复