Python数据类型中列表、元组、字典、集合、字符串,很重要,但是发现学完后容易混淆。
最近我深有体会,也有如下疑问:
“我学了列表、元组、字典、集合、字符串,感觉它们长得好像啊,都是装东西的‘盒子’。可是用的时候总是搞混,不知道选哪个。而且为什么要有这么多不同的类型?能不能统一用一种啊?”
今天,我们一起用一把“收纳神器”的比喻,把Python的这五种数据类型重新学习一遍,学东西一定要学的明明白白。不仅知道它们是什么,还要知道什么时候用哪个。
一、先看一张“全家福”
小贴士:Python 3.7+ 字典保留插入顺序,“无序”是历史版本的特性,使用时要注意Python版本。
二、用一个生活场景秒懂
想象你要整理自己的房间:
- 字符串:就是一串珍珠项链,每颗珍珠就是一个字符。你只能换整条项链,不能单独拆一颗(不可变)。
- 列表:像磁吸收纳盒,你可以随时往里加东西、拿走东西、调换位置(可变、有序)。
- 元组:像密封好的相册,一旦封好就不能改(不可变),但你仍然可以按顺序翻看(有序)。
- 字典:像带标签的文件柜,每个抽屉有个标签(键),你根据标签直接找文件(值),不用翻遍所有抽屉。
- 集合:像抽奖箱,里面的球不能重复,而且你只管“有没有这个号码”,不管顺序。
三、逐个解剖
1. 字符串
字符串就是一串字符按顺序排好,而且不能修改(不可变)。
name = "Python"
# 尝试修改:name[0] = 'J' ❌ 会报错!
# 但可以重新赋值(换一条新项链)
name = "Java"# ✅ 这是换了一条项链,不是修改原项链
常用操作:
s = "hello world"
print(s.upper()) # HELLO WORLD
print(s.replace("world", "Python")) # hello Python
print(len(s)) # 11(空格也算)
print(s[1:4]) # ell(切片)
使用场景:任何文本处理,比如用户名、邮件内容、文件路径。
2. 列表
列表用方括号 [],可以放任何类型的元素,可以随便改。
shopping = ["苹果", "香蕉", "牛奶"]
shopping.append("面包") # 加一个
shopping[1] = "草莓"# 改第二个
shopping.remove("苹果") # 删除
print(shopping) # ['草莓', '牛奶', '面包']
特点:
使用场景:购物车、待办事项、动态数据序列。
3. 元组
元组用圆括号 (),一旦创建死活不能改。
colors = ("红", "绿", "蓝")
# colors[0] = "黄" ❌ 报错!不能改
# 只能读
print(colors[1]) # 绿
print(len(colors)) # 3
为什么需要元组?
使用场景:一周七天、坐标点(x,y)、数据库配置信息。
4. 字典
字典用花括号 {},里面是 键:值 对。通过键直接取值,不需要记住位置。
student = {
"name": "小明",
"age": 18,
"score": 95
}
print(student["name"]) # 小明
student["class"] = "3班"# 加一对
student["age"] = 19# 改值
# 安全取值方式
print(student.get("gender", "未知")) # 未知,不会报错
特点:
使用场景:用户信息、配置参数、缓存数据。
5. 集合
集合也用花括号 {},但里面只有一个一个的元素,没有冒号。
A = {1, 2, 3, 2, 1} # 自动去重 -> {1, 2, 3}
# 常用操作
A.add(4)
A.remove(2)
print(3in A) # True
# 集合运算
B = {3, 4, 5}
print(A & B) # 交集 {3,4}
print(A | B) # 并集 {1,3,4,5}
注意:空集合不能写 {}(那是空字典),要写 set()。
使用场景:去重、共同好友、权限标签(判断某个元素是否存在)。
四、终极对比表(建议收藏)📌
| | | | | |
|---|
| "abc" | | | | |
| [1,2,3] | | | | |
| (1,2,3) | | | | |
| {"a":1} | | | | |
| {1,2,3} | | | | |
五、什么时候用哪个?
简易口诀:
六、新手最常踩的3个坑
坑1:误用 = 复制可变对象
a = [1, 2, 3]
b = a # b和a指向同一个列表
b.append(4)
print(a) # [1,2,3,4] ❌ a也被改了!
# 正确复制:b = a.copy() 或 b = a[:]
坑2:把列表当字典的键
# ❌ 报错
d = {[1,2]: "value"}
# ✅ 改用元组
d = {(1,2): "value"}
坑3:集合的 {} 和字典的 {} 搞混
empty_dict = {} # 字典
empty_set = set() # 集合
not_empty_set = {1} # 集合(有一个元素)
七、小练习
- 有一个列表
nums = [3,1,4,1,5,9,2,6,5,3],怎么得到去重后的列表? - 想存储一个学生的姓名、年龄、身高,并且以后可能会修改年龄,该用哪种类型?
- 如果要把
(1,2,3) 和 [1,2,3] 作为字典的键,哪个能成功?
学编程语言(Python也适用)的数据类型,不要死记硬背,而是多写代码、多踩坑。遇上错误去解决,就能记住了。