Py学习  »  Python

Python里的列表、元组、字典、集合到底有什么区别?一篇讲明白

码上编程学习社 • 2 周前 • 136 次点击  

 

刚学 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 数据结构学明白了。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/201008