从「一堆并列变量」到「一个容器装一切」 — 60 分钟搞懂 Python 最常用的两个内置类型。
讲师 王某 · banyixia 工程师 / 60 分钟 / 新手向 · 无需编程基础
办一下 · 教学课件 · teaching-slides skill · 含练习答案4 条 SMART outcomes · 课后会用一份小测验验收
每个联系人有 名字 + 电话 + 邮箱。如果用并列变量记 100 个人 ——
# 噩梦版 · 400 个变量,改一个人要找 4 行 person_1_name = "小王"; person_1_phone = "139..." person_2_name = "小李"; person_2_phone = "138..." # ... 再来 98 组,你疯了
Python 给你 两个工具:列表(装一队人) + 字典(装一个人的所有字段)。
5 行代码就能搞定。今天学完,你就能写这个 App 的核心。
list有顺序的容器,可以装任意类型,可改可删。
像「书架」 — 有 1 号 2 号位置,可换书、可加书。
# 创建一个朋友列表 friends = ["小王", "小李", "小张"] print(friends[0]) # 小王 · 索引从 0 开始 friends.append("小赵") # 末尾添加 friends.remove("小李") # 按值删除 print(friends) # ['小王', '小张', '小赵']
总结:列表 = [元素] · 用数字索引访问 · 顺序重要
dict无顺序的 key → value 容器,key 不能重复。
像「字典」 — 用单词查释义,你不会两个一样的词条。
# 用字典存一个联系人 friend = {"name": "小王", "phone": "13900001234", "email": "x@y.com"} print(friend["name"]) # 小王 · 用 key 访问 friend["age"] = 28 # 添加新 key del friend["email"] # 删除 key print(friend) # {'name':'小王','phone':'139..','age':28}
总结:字典 = {key: value} · 用 key 访问 · 顺序无关
· 数据有顺序(报名表、排队、消息流)
· 需要挨个遍历(for 循环全跑一遍)
· 同类型同结构的一组(全是名字、全是分数)
· 不需要按 key 快速查找
· 数据有属性(一个人:name/age/city)
· 需要按 key 快速查(根据名字找电话)
· 字段名比顺序更重要
· 一条记录里字段类型不同
动手敲,不要只看 · 卡住先想 30 秒 · 再翻下一页对答案
nums = [3, 1, 4, 1, 5, 9, 2, 6],打印第 3 个元素和列表长度。name / age / city),然后把 age 改大 1,并加一个 "hobby" key。names = ["小王","小李","小张"],用 for 循环打印 "你好, 小王!" 这种问候,共 3 行。name 和 phone),写一个查电话功能:输入名字打印对应电话,找不到打印「查无此人」。nums = [3,1,4,1,5,9,2,6] print(nums[2]) # 第 3 个 → 索引 2 print(len(nums)) # 长度 8
第 3 个 = 索引 2(从 0 开始数);len() 拿长度。
写成 nums[3] 会拿到第 4 个;nums[8] 直接 IndexError。
me = {"name":"王", "age":28, "city":"上海"}
me["age"] = me["age"] + 1
me["hobby"] = "骑车"
字典 改值跟加 key 是同一个语法:d[k] = v,key 存在就改、不存在就新建。
写 me.age(点号)不行 — 字典只认 [...] 方括号。
names = ["小王","小李","小张"] for n in names: print(f"你好, {n}!")
列表能直接 for x in list 遍历,f"..." 是格式化字符串,把变量拼进去。
用 for i in range(3) 然后 names[i] 也对,但更啰嗦;直接迭代元素是 Python 习惯。
book = [{"name":"小王","phone":"139..."},
{"name":"小李","phone":"138..."}]
def find(q):
for p in book:
if p["name"] == q:
return p["phone"]
return "查无此人"
print(find("小王"))
「列表装字典」是真实数据的常见结构:遍历列表 → 比较 key → 找到 return。
忘 return "查无此人" 找不到时返回 None;直接 p["phone"] 不判断 key,改用 p.get("phone","") 更稳 — 否则 KeyError。