刚学 Python 的时候,很多人都会被这几个东西绕晕:
列表 list、元组 tuple、字典 dict、集合 set。
看起来都是“拿来装数据”的,写法却一个比一个不一样。有的用 [],有的用 (),还有的用 {}。
那为什么 Python 要搞出这么多数据结构?到底什么时候用哪个?
其实没那么复杂。它们最大的区别,不在于长什么样,而在于“怎么存数据”和“你准备怎么用这些数据”。
一、列表 list:最常用,能存也能改
列表可以说是 Python 新手接触最多的数据结构。
比如我们要保存几门编程语言:
languages = ["Python", "Java", "C++"]
列表最大的特点就是:有顺序,而且可以修改。
例如:
languages[0] = "Go"
修改之后:
["Go", "Java", "C++"]
还可以继续添加:
languages.append("JavaScript")也可以删除:
languages.remove("Java")
所以,如果你的数据后面还需要增加、删除、修改或者按照位置访问,列表通常是最直接的选择。
比如购物车商品、学生名单、待办事项,都很适合用列表。
二、元组 tuple:和列表很像,但不能随便改
元组的写法是:
point = (120, 30)
乍一看,它和列表好像没什么区别。
但有一个非常关键的不同:
元组创建之后,里面的元素不能直接修改。
比如:
point[0] = 100
这样运行就会报错。
所以元组更适合保存一些确定以后不希望被随意改变的数据。
例如:
rgb = (255, 128, 0)
或者:
date = (2026, 9, 12)
可以简单理解成:
列表偏“动态”,元组偏“固定”。
如果数据后面经常要改,用 list;如果这组数据本身比较固定,可以考虑
tuple。
三、字典 dict:不是按位置找,而是按“名字”找
字典和前面两个就不太一样了。
例如我们想保存一个学生的信息:
student = {
"name": "小明",
"age": 18,
"score": 95
}
这里保存的是一组组:
键(key) → 值(value)
所以我们想知道学生的名字,不需要记“名字排在第几个”,直接写:
print(student["name"])
结果就是:
小明
还可以修改:
student["age"] = 19
也可以添加新的信息:
student["city"] = "北京"
这就是字典特别好用的地方。
如果一条数据有非常明确的名称和对应值,字典通常比列表更清楚。
比如用户信息、商品信息、配置参数,都很适合用 dict。
四、集合 set:最大的特点就是“自动去重”
集合写起来也是大括号:
numbers = {1, 2, 3, 4}
但是它和字典完全不是一回事。
比如:
numbers = {1, 2, 2, 3, 3, 3}
print(numbers)
你会发现,重复的数据会被自动去掉。
最终留下的就是:
{1, 2, 3}
所以集合特别适合处理去重、成员判断、集合运算这类问题。
比如一个名单里有很多重复名字:
names = ["小明", "小红", "小明", "小李"]
可以这样去重:
unique_names = set(names)
一下就简单很多。
不过要注意,集合不是用来按索引取值的,所以不能像列表一样写 numbers[0]。
四种到底怎么选?
其实不用死记一堆概念,可以先记住这个思路:
需要按顺序保存,而且经常修改 → list
需要按顺序保存,但数据相对固定 →
tuple
需要通过“名称”找到对应的数据 → dict
需要去重、判断元素是否存在或做集合运算 → set
举个更直观的例子。
假设现在要做一个学生管理程序:
学生名单可以用:
students = ["小明", "小红", "小李"]
一个学生的详细资料可以用:
student = {
"name": "小明",
"age": 18
}
固定的出生日期可以表示成:
birthday = (2008, 5, 20)
想统计一共有多少个不同的城市,则可以用:
cities = {"北京", "上海", "广州"}
这么放到真实场景里理解,就没那么容易混了。
最后
很多 Python 新手一开始会觉得:
列表、元组、字典、集合,不都是存数据吗?为什么非要分这么多种?
但真正开始写代码以后就会发现,不同的数据结构其实是在解决不同的问题。
不用一开始就把每种结构的所有方法全部背下来。
先把最核心的区别搞懂:
list 看顺序和修改,tuple 看固定,dict 看键值对应,set 看去重。
等以后项目写多了,你看到一组数据,自然就会知道应该用哪一种。
这才是真正把 Python 数据结构学明白了。