Python学习系列之集合(十六)

一、什么是集合

1. 集合

  • Python语言提供了内置数据结构
  • 与列表、字典一样都属于可变类型的序列(可进行增删改操作)
  • 集合是没有value的字典(底层数据是通过Hash表进行存储)

 2. 集合是一个无序序列

s3=set([3,4,53,56])     #集合是一个无序序列
print(s3,type(s3))

  执行结果如下:

 以上结果表明,在集合中各元素的位置不一定是声明时的位置,即集合是一个无序序列

 

二、集合的创建

集合的创建方式:

  1.直接使用{}

'''第一种创建方式使用{}'''
s={1,2,2,3,4,5,5,6,6,7}
print(s,type(s))

  执行结果如下:

 结果表明,使用{}可以创建集合,而且创建时会将重复的元素去除(集合中不允许有重复的元素),而字典是不允许有重复的key

  2.使用内置函数set()

    2.1 使用set创建一个自定义长度的集合

'''第二种创建方式 使用内置函数set()'''
s1=set(range(6))    #创建一个0-5的集合
print(s1,type(s1))

  执行结果如下:

    2.2 set()可以将序列变成集合

'''set()可以将序列变成集合'''
s2=set([1,1,2,3,3,4,5])
print(s2,type(s2))

  执行结果如下:

 以上结果可以看出,set()可以将列表转变成一个集合,而且会将列表中的元素做去重操作

    2.3 set()可以将元组的元素转换成集合

'''set()可以将元组的元素转换成集合'''
s4=set((22,33,44,45,55,56,55))
print(s4,type(s4))

  执行结果如下:

     2.4 set()可以将字符串序列转换成集合

'''set()可以将字符串序列转换成集合'''
s5=set('Python')
print(s5,type(s5))

  执行结果如下:

     2.5 set()可以将集合转换成集合

'''set()可以将集合转换成集合'''
s6=set({1,2,2,3,4})
print(s6,type(s6))

  执行结果如下:

     2.6 set()创建空集合

'''set()创建空集合'''
s7=set()
print(s7,type(s7))

  执行结果如下:

 

三、集合的相关操作

1. 集合元素的判断操作

  • in或not in

举例:

'''集合元素的判断'''
s={10,20,30,40,50}
print(20 in s)      #True
print(22 in s)      #False
print(20 not in s)      #False
print(22 not in s)      #True

  执行结果如下:

2. 集合元素的新增操作

  • 调用add()方法,一次添加一个元素
  • 调用update()方法,一次至少添加一个元素,即可以一次添加多个元素

举例:

'''集合的新增操作'''
s={10,20,30,40,50}
s.add(100)
print(s)
s.update({200,300,400})     #集合可以添加集合元素
print(s)
s.update([11,22,33])    #集合可以添加列表元素
print(s)
s.update((60,70,80))    #集合可以添加元组元素
print(s)

s.update(800)       #update()不能直接添加一个元素,否则会报错,添加一个元素要使用add()
print(s)

    执行结果如下:

 以上结果表明,添加一个元素时需使用add()方法,update()方法只能添加列表、集合和元组元素

 

3. 集合元素的删除操作

  • 调用remove()方法,一次删除一个指定元素,如果指定的元素不存在抛出KeyError
  • 调用discard()方法,一次删除一个指定元素,如果指定的元素不存在不会抛异常
  • 调用pop()方法,一次只删除一个任意元素
  • 调用clear()方法,清空集合

举例:

  • 调用remove()方法删除
print('---元素的删除---')
s={800, 33, 100, 70, 40, 200, 10, 11, 300, 400, 80, 50, 20, 22, 60, 30}
s.remove(20)
print(s)

s.remove(500)       #remove()删除不存在的集合元素时会报KeyError
print(s)

    执行结果如下:

  •  调用discard()方法删除
s={800, 33, 100, 70, 40, 200, 10, 11, 300, 400, 80, 50, 20, 22, 60, 30}
s.discard(500)        #discard()删除不存在的集合元素时不会报KeyError
print(s)

    执行结果如下:

  •  调用pop()方法删除
s={800, 33, 100, 70, 40, 200, 10, 11, 300, 400, 80, 50, 20, 22, 60, 30}
s.pop()     #删除集合中任意一个元素
print(s)
s.pop(30)   #pop()方法不需要参数,输入参数会报TypeError: pop() takes no arguments (1 given)
print(s)

  执行结果如下:

  以上结果表明,当使用pop()方法进行删除时不需要输入参数,如果输入参数则会报TypeError: pop() takes no arguments (1 given) 

  • 调用clear()方法删除
s={800, 33, 100, 70, 40, 200, 10, 11, 300, 400, 80, 50, 20, 22, 60, 30}
s.clear()       #清空集合
print(s,type(s))

    执行结果:

 

四、集合间的关系

1. 两个集合是否相等

  • 可以使用运算符 == 或 != 进行判断

2. 一个集合是否是另一个集合的子集

  • 可以调用方法issubset进行判断
  • B是A的子集(如下图所示)

3.一个集合是否是另一个集合的超集

  • 可以调用方法issuperst进行判断
  • A是B的超集(如下图所示)

4. 两个集合是否没有交集

  可以调用方法isdisjoint进行判断

举例:

  • 判断两个集合是否相等
'''判断两个集合是否相等'''
s={10,20,30,40,50,60}
s1={60,50,40,30,20,10}
print(s==s1)
print(s!=s1)

  执行结果:

 结果表明,集合是无序序列,只要两个集合中的元素值一样则两个集合就相等,不考虑顺序问题

  • 一个集合是不是另一个集合的子集
'''一个集合是不是另一个集合的子集'''
s={10,20,30,40,50,60}
s2={10,20,30}
s3={10,20,80}
print(s2.issubset(s))
print(s3.issubset(s))

  执行结果:

  •  一个集合是不是另一个集合的超集
'''一个集合是不是一个集合的超集'''
s={10,20,30,40,50,60}
s2={10,20,30}
s3={10,20,80}
print(s.issuperset(s2))
print(s.issuperset(s3))

  执行结果:

  • 两个集合是否有交集
'''两个集合是否有交集'''
s={10,20,30,40,50,60}
s2={10,20,30}
s3={70,90,80}
print(s2.isdisjoint(s))     #False  有交集则为False
print(s3.isdisjoint(s))     #True   没有交集则为True

  执行结果:

 说明:当判断是否有交集,两个集合有交集时则为False,无交集则为True

 

五、集合的数学操作

 举例:

  • 集合的数学交集,intersection()与 & 等价,交集操作
'''集合的数学操作'''
'''第一种是交集'''
s={10,20,30,40,50,60}
s1={20,30,40}
print(s.intersection(s1))
print(s & s1)       #intersection()与 & 等价,交集操作

  执行结果:

  •  集合的数学并集,union()与 | 等价,并集操作
'''集合的数学并集'''
s={10,20,30,40,50,60}
s2={20,30,80}
print(s.union(s2))
print(s | s2)       #union()与 | 等价,并集操作

  执行结果:

  •  集合中的数学差集
'''集合的数学差集'''
s={10,20,30,40,50,60}
s2={20,30,80}
print(s.difference(s2))
print(s-s2)

  执行结果:

  •  集合中的数据对称差集
'''集合的数学对称差集'''
s={10,20,30,40,50,60}
s2={20,30,80}
print(s.symmetric_difference(s2))
print(s^ s2)

  执行结果:

 注意:在数学操作中,集合原来的值是不变的,比如s集合的值在进行各种交集并集操作后,s集合的值还是原来的值

 

六、集合生成式

'''集合生成式'''
#列表生成式
lst=[i*i for i in range(10)]
print(lst)

#集合生成式
s={i*i for i in range(10)}
print(s)

  执行结果:

 说明:集合的生成式和列表生成式的 表达式内容是一样的,只需要将[]改成{}即可

 

总结:

列表、字典、元组、集合总结:

 

posted @ 2021-02-23 15:23  寒冰宇若  阅读(140)  评论(0编辑  收藏  举报