python容器类型数据对比学习
python提供了4种基础容器类型数据,他们是列表,元组,字典,集合。
这四种数据的灵活应用,可以为我们解决大部分数据处理过程中遇到的问题,通过一系列对比学习,希望你可以将这部分知识掌握的更加扎实牢固
1.4个容器类型数据的共同点
4个容器类型数据存在的目的都是为了存储数据,这是他们最大的共同点,也是我们对容器类型数据的基本认识。
这个共同点也引出了他们的不同点,既然都能存储数据,为什么要弄出4个容器类型数据,而不是用一种就可以了呢?
2. 存储数据的目的不同
容器
存储目的
示例
列表
按顺序存储,按顺序使用,单纯的堆积数据
lst = [1, 2, 3]
元组
按顺序存储,按顺序使用,单纯的堆积数据
tup = (1, 2, 3)
字典
按关键字存储,提供key到value的映射,映射关系才是我们关心的
dic = {'python': 100, 'php': '90'}
集合
按关键字存储,主要目的是去重
set = {1, 4, 5}
3. 创建,新增,删除,修改,查询的相同与不同
容器
创建
新增
删除
修改
查询
列表
用[] 创建
append方法
del 方法
通过索引进行修改
通过索引进行查询
元组
用()创建
无新增方法
无删除方法
无修改方法
通过索引查询
字典
用{}创建
通过关键字赋值新增
del 方法
通过关键字赋值进行修改
通过关键字查询
集合
使用{}创建
add 方法
del 方法
无修改方法
无查询方法
解释一些疑问
疑问1 同样是新增,为什么列表的方法名是append,而集合的新增方法名是add?
列表新增,除了append方法,还有insert方法,append默认在列表尾部追加,insert要指定插入的索引位置,这两个方法名都比较含蓄的体现出了列表的有序特点
集合里没有索引的概念,也就没有尾部的概念,新增方法名用add比较合适,和顺序无关,就是增加一个数据
疑问2 为什么集合没有修改和查询的方法
从使用场景来分析,集合的主要作用是为了去重,不存在修改的操作,至于查询操作,没有索引,也就不能通过索引来查询数据,也不像字典那样一个key对应一个value,因此,也无法像字典那样通过key去查询value,唯一的近似查询的操作是in 这个成员操作符判断某个数据是否在集合中
4. 列表与元组,字典与集合对比
通过前面的学习,很容易发现,列表与元组有点像,字典与集合有点像,下面,对他们进行仔细的比较分析
4.1 列表与元组
列表与元组几乎一样,唯一的不同的是,元组不可以修改。元组没有新增,修改,删除这3个方法,那么元组存在的价值和意义是什么呢?
可以做字典和集合的key
元组可以做函数的返回值
由于元组是不可变对象,因此,元组可以用来做字典和集合的key, 使用元组做函数的返回值,则可以防止函数的使用者修改函数的返回结果,下面的这段代码像你演示这两种功能
lst1 = [10, 3, 2, 6, 7, 5]
lst2 = [3, 2, 5, 6, 10, 7]
combine_set = set()
for item1 in lst1:
for item2 in lst2:
if item1 + item2 == 12:
combine_set.add((min(item1, item2), max(item1, item2)))
print(combine_set)
从两个列表里各取出一个数,令他们的和为12,请问这种组合一共有多少?
5+7= 12,从lst1中取5,lst2中取7符合要求,从lst1中取7,lst2中取5也符合要求,但这两个组合是相同的,这就存在了一个去重的操作要求,为了去重,用两个数组成元组,值小的数放前面,值大的数放后面,这样就达到了去重的目的。
4.2 字典与集合
字典和集合的创建都用{}, 我们可以将集合看成是一个特殊的字典,集合里key和value是相同的,只是集合里隐去了value部分,只保留了key的部分。
字典和集合的key都是不能重复的,因为key存在的意义就是唯一的与一个value建立起映射关系,两个相同的key,不论是映射到相同的value还是不同的value,都没有存在的意义。