大数跨境
0
0

一文弄懂Python中的列表元组集合和字典的区别

一文弄懂Python中的列表元组集合和字典的区别 AI算法之道
2024-06-17
0
导读:Python中列表元组集合字典的区别











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’](‘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之间的区别。



您学废了嘛?






点击上方小卡片关注我




扫码进群,交个朋友!


【声明】内容源于网络
0
0
AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
内容 573
粉丝 0
AI算法之道 一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
总阅读23
粉丝0
内容573