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