
01
引言
大家是否想过 Python中为什么有这么多集合型的数据类型?那么它们之间有何不同之处呢?如果你想知道,请阅读本文了解列表、元组、集合和字典之间的区别。
02
举个栗子
这四种数据类型都可以存储多个值。唯一不同的是,这些值可以用特殊符号表示。
li = [1, 2, 3, 4] -> Lists use []tp = (1, 2, 3, 4) -> Tuples use ()st = {1, 2, 3, 4} -> Sets use {}di = {1: 10, 2: 20} -> Dictionaries use {} but contain key:value pairs
大家可以注意到其中的区别。不过,这并不意味着一种数据类型比另一种特殊。那么,这些类型间的实际差别在哪里呢?,我们接下来进行详细的介绍吧!
03
有序性
有序性是指对给定数据类型每次打印时是保持给定的顺序一致,还是每次都会发生变化。
列表、元组和字典都是有序的。
集合是无序的。
我们来打印下样例,代码如下:
li = ['A', 'B', 'C']tp = ('A', 'B', 'C')st = {'A', 'B', 'C'}di = {'A': 10, 'B': 20, 'C': 30}print(li)print(tp)print(st)print(di)
运行后,结果如下:
['A', 'B', 'C']('A', 'B', 'C'){'A', 'C', 'B'}{'A': 10, 'B': 20, 'C': 30}
04
索引
从一组元素中访问单个元素称为索引。索引可以使用方括号,并在方括号内注明索引值(从 0 开始)。

Indexing a List
可对列表和元组进行索引。
无法对集合进行索引。
字典可以按键值访问,这与索引类似。
我们来打印下样例,代码如下:
li = ['A', 'B', 'C']tp = ('A', 'B', 'C')di = {'A': 10, 'B': 20, 'C': 30}print(li[0])print(tp[1])print(di['C'])
运行后,结果如下:
AB30
05
可变性
在可变性规定了给定数据类型的值是否可以修改。它将数据类型分为可变性和不可变性两种。
列表、集合和字典是可变的,可以修改。
元组是不可变的,不能修改。
注意:集合中的值不能修改。但我们可以添加或删除这些元素
可变类型代码示例如下:
li = ['A', 'B', 'C']li[0] = 'D'print(li)
输出如下:
['D', 'B', 'C']
不可变类型代码示例如下:
tp = ('A', 'B', 'C')tp[0] = 'D'print(tp)
输出如下:
TypeError: 'tuple' object does not support item assignment
06
允许重复
这四个类型另一个关键区别是是否允许重复元素。
列表和元组允许重复值。
集合不允许重复值。如果您尝试输入重复的值,它将只接受一个值并忽略重复的值。
字典允许在值中出现重复,但不允许在键中出现重复。键值必须是唯一的。
代码示例如下:
li = ['A', 'B', 'C', 'A']tp = ('A', 'B', 'C', 'A')st = {'A', 'B', 'C', 'A'}di = {'A': 10, 'B': 20, 'C': 10}print(li)print(tp)print(st)print(di)
输出如下:
[](‘A’, ‘B’, ‘C’, ‘A’){‘C’, ‘B’, ‘A’}{‘A’: 10, ‘B’: 20, ‘C’: 10}
在字典类型的键中使用重复值将保留键的顺序,并取最后给出的值作为输出。
di = {'A': 10, 'B': 20, 'A': 20}print(di)
输出如下:
{'A': 20, 'B': 20}
07
Types Allowed
有些数据类型允许同时使用可变值和不可变值,但有些类型只允许使用不可变值。数据类型可据此进行分类。
列表和元组允许可变值和不可变值。
集合只允许不可变的值。这意味着,由于其可变性,一个集合甚至不能包含另一个集合。字典只允许在键中使用不可变类型。
字典值既可以是可变的,也可以是不可变的。
列表和元组代码示例如下:
li = [(30, 40), [10, 20]]tp = ((30, 40), [10, 20])print(li)print(tp)
代码输出如下:
[(30, 40), [10, 20]]((30, 40), [10, 20])
集合代码示例如下:
st = {10, 20, {30, 40}}print(st)
运行后结果如下:
TypeError: unhashable type: 'set'
该错误输出表明集合是不可hash的。所有不可散列的数据类型都是可变的,而所有可散列的数据类型都是不可变的。
字典代码示例如下:
di = {'A': [10], [2]: 'B'}print(di)
运行后结果如下:
TypeError: unhashable type: 'list'
在上述代码中,value [10] 被接受,但 key [2] 不被接受。
08
本文重点介绍了Python中集合数据类型的几个维度上的差别,为此总结如下:
最后希望大家可以清楚地理解 list/tuple/set/dictionary之间的区别。
您学废了嘛?
点击上方小卡片关注我
扫码进群,交个朋友!


