python集合数据类型详解

集合

前言:首先我问大家几个问题,什么是集合?集合的作用是什么?集合是可变的数据类型吗?下面我们就按照这些问题进行展开。

  1. 什么是集合?

由不同元素组成的集合,集合是一组无序排列 可hash值,可作为字典的key。集合的目的是将不同的值存放在一起,不同的集合间用来做关系运算。

  1. 集合的作用

我认为集合有两个作用,一个是集合本身的性质 ‘’去重‘’,另一个集合可以用来做关系测试,比如交集,并集,差集,反交集(个人叫法)

  1. 集合是可变数据类型吗?
set1 = {1, 2, 3}
print(id(set1))
set1.add(4)
print(id(set1))
# 输出:
	166444888576
	166444888576

a) 由此可见集合是可变数据类型,但是在这里我要强调一下,上面我说了集合是一组无序排列 可hash值,所以说,集合里面的元素必须都是不可变的数据类型,而且集合也是无序的,所以说没有索引的概念

b) 将列表作为集合的元素

set1 = {[1, 2], 3, 4}
print(set1)

# 报错:
	TypeError: unhashable type: 'list'

集合的方法

  1. 集合的创建

    a) 直接用花括号括起来

    set1 = {1, 2, 3, 3, 2}
    print(set1)
    
    # 输出:
    	 {1, 2, 3}
    

    可见集合会自动去除重复的元素

    b) 内置方法进行创建

    set1 = set((1, 2, 3, 3, 2))
    print(set1)
    
    # 输出
    	{1, 2, 3}
    

    c) 创建空集合

    set1 = {}   # 这样创建是默认创建的空字典而不是空集合
    set2 = set()  
    print(type(set1))
    print(type(set2))
    
    # 输出:
    	<class 'dict'>
    	<class 'set'>
    
  2. a) add() 单独增加

    set1 = {1, 2, 3}
    set1.add(4)
    print(set1)
    
    # 输出:
    	{1, 2, 3, 4}
    

    b) update() 迭代增加,与列表的extend类似

    set1 = {1, 2, 3}
    set1.update([4, 5, 6])
    print(set1)
    
    # 输入:
    	{1, 2, 3, 4, 5, 6}
    
  3. a) remove() 删除指定元素

    set1 = {1, 2, '小红'}
    set1.remove('小红')
    print(set1)
    
    # 输出:
    	{1, 2}
    

    b) pop() 随机删除一个元素

    set1 = {'李明', '小兰', '小红'}
    set1.pop()
    print(set1)
    
    # 输出:
    	 多种结果
    
  4. 改,查
    因为集合是无序的,所以不提供改和查的功能,但还是有隔山打牛的方式进行更改

    a) 改 我们先删除要改的元素,然后进行添加元素

    set1 = {'李明', '小兰', '小红'}
    set1.remove('小红')
    set1.add('李华')
    print(set1)
    
    # 输出:
    	{'小兰', '李华', '李明'}
    

    b) 查 通过 in 或者 not in 判断元素是否在集合内

    set1 = {'李明', '小兰', '小红'}
    print('李明' in set1)
    print('憨憨' in set1)
    
    # 输出:
    	True
    	False
    

重点

前面说了集合的几个作用:

  • 去重
  • 做关系测试
  1. 去重,当我们要对列表进行去重时,我们可以将列表转为集合再转为列表,即可完成去重工作

    set1 = [1, 2, '你好', 2, 7, '你好']
    set1 = set(set1)
    print(set1)
    print(list(set1))
    
    # 输出:
    	{1, 2, '你好', 7}
    	[1, 2, '你好', 7]
    
  2. 关系测试

    a) 交集 & 两个集合共有的元素

    set1 = {1, 2, 3, 4}
    set2 = {3, 4, 5, 6}
    # 两种去交集的方式
    print(set1 & set2)
    print(set1.intersection(set2))
    
    # 输出:
    	{3, 4}
    	{3, 4}
    

    b) 并集 |

    set1 = {1, 2, 3, 4}
    set2 = {3, 4, 5, 6}
    print(set1 | set2)
    
    # 输出:
    	{1, 2, 3, 4, 5, 6}
    

    c) 差集

    set1 - set2:set1 减去与set2的共有元素,再得到set1的结果

    set1 = {1, 2, 3, 4}
    set2 = {3, 4, 5, 6}
    print(set1 - set2)
    
    # 输出:
    	{1, 2}
    

    set2 - set1:set2 减去与set1 的共有元素,再得到set2的结果

    set1 = {1, 2, 3, 4}
    set2 = {3, 4, 5, 6}
    print(set2 - set1)
    
    # 输出:
    	{5, 6}
    

    d) 反交集(个人叫法) ^
    可以理解为并集减去交集得到的结果

    set1 = {1, 2, 3, 4}
    set2 = {3, 4, 5, 6}
    print(set2 ^ set1)
    print((set1 | set2) - (set1 & set2))
    
    # 输出:
    	{1, 2, 5, 6}
    	{1, 2, 5, 6}
    
  3. 判断子集与超集

    a) 判断子集超集

    set1 = {1, 2, 3, 4, 5}
    set2 = {3, 4}
    print(set1 > set2)   # 通过大于小于号判断
    print(set2.issubset(set1))  # set2是set1的子集,subset:子集
    print(set1.issuperset(set2))  # set1是set2的超集,superset:超集
    
    # 输出:
    	True
    	True
    	True
    

结语:python中集合的基本介绍就到这里了,希望读者都能够有属于自己的收获,觉得还不错的可以点个赞,你们的鼓励是我最大的动力

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章