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,都没有存在的意义。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案