集合及相关操作

一、什么是集合

  1. 是python语言提供的一种内置的数据结构
  2. 与列表,字典一样是可变类型的序列
  3. 集合是没有value的字典

二、集合的创建方式

1、直接{ }

2、使用内置函数set()

'''
第一种创建方式——直接使用{}
'''
demo={'秦健峰','梅达',98}
print(demo)
print(type(demo))

#创建空集合
demo_void={}
print(demo_void,type(demo_void))  #{} <class 'dict'>可以看出,这是字典类型,也就是说建立集合时不能直接使用{}
demo_empty=set()
print(demo_empty,type(demo_empty))#set() <class 'set'>

'''
第二种创建反式——使用set()函数
'''
#使用range创建集合
demo2=set(range(0,6))
print(demo2)

#使用列表创建集合
lst=list([3,4,5,2,3,3,3])
print(lst,type(lst))
demo3=set(lst)
print(demo3,type(demo3))   #{2, 3, 4, 5} <class 'set'>可以看到集合中重复的元素被删除,集合中的元素不允许重复

#使用元组创建集合
test=(123,'meida',98)
print(test,type(test))  #(123, 'meida', 98) <class 'tuple'>
demo4=set(test)
print(demo4,type(demo4))#{'meida', 123, 98} <class 'set'>可以看出集合是无序的

#使用字符串创建集合
sty='python'
print(sty,type(sty))#python <class 'str'>
demo5=set(sty)
print(demo5,type(demo5))#{'n', 't', 'p', 'y', 'o', 'h'} <class 'set'>

#使用集合创建集合
demo6=set({124,64,25})
print(demo6,type(demo6))#{64, 25, 124} <class 'set'>

三、集合的相关操作

1、集合元素的判断操作

  • in
  • not in
'''
集合的判断操作
'''
print(90 in demo)     #False
print(90 not in demo) #True
print(98 in demo)     #True
print(98 not in demo) #False

2、集合元素的新增操作

  • 调用add()方法,一次添加一个元素
  • 调用update()方法至少添加一个元素
'''
集合的新增操作
'''
demo.add(500)
print(demo,type(demo))  #{98, 499, 23, 500, 6, 455, 89} <class 'set'>

#将集合添加到另一个集合中
demo.update({100,200,300})
print(demo)#{98, 100, 6, 455, 200, 300, 499, 500, 23, 89}
#J将列表元素添加到另一个集合中
demo.update([900,88,6666,544])
print(demo)#{544, 98, 100, 900, 6, 455, 200, 6666, 300, 499, 500, 23, 88, 89}
#将元组添加到集合中
demo.update((1,2,3,4,5,6))
print(demo)#{1, 2, 3, 900, 4, 6, 5, 6666, 23, 544, 300, 455, 200, 88, 89, 98, 100, 499, 500}

demo.update(5) #TypeError: 'int' object is not iterable///update()不能代入一个元素

3、集合元素的删除操作

  • 调用remove()方法,一次删除一个指定元素,如果指定的元素不存在就抛出异常KeyError
  • 调用discard()方法,一次删除一个指定元素,如果指定的元素不存在也不抛出异常
  • 调用pop()方法,一次只删除一个任意元素,不可指定元素删除
  • 调用clear()方法,清空集合
'''
集合的删除操作
'''
print("集合元素的删除操作")
print(demo)

#remove方法
demo.remove(1)
print(demo)
#demo.remove(999999)#KeyError: 999999如果指定元素不存就会报错

#discard方法
demo.discard(2)
print(demo)
demo.discard(514151)#虽然指定元素不存在,但是也不会抛出异常

#pop方法
demo.pop()
print(demo)#随机删除
#demo.pop(6)#TypeError: set.pop() takes no arguments (1 given)//pop不能指定参数

#clear方法
demo.clear()
print(demo)#set()//空集合

四、集合间的关系

1、两个集合是否相等

s1={10,20,30,40,50}
s2={50,40,30,20,10}
s3={1,2,3,4,5}

print(s1==s2) #True
print(s1!=s2) #False
print(s1==s3) #False
print(s1!=s3) #True

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

s1={10,20,30,40,50}
s2={10,20,30,40}
s3={10,20,60}

print(s2.issubset(s1))#True
print(s3.issubset(s1))#False

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

s1={10,20,30,40,50}
s2={10,20,30,40}
s3={10,20,60}

print(s1.issuperset(s2))#True
print(s1.issuperset(s3))#False

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

s1={10,20,30,}
s2={1,2,3}
s3={10,20,60}

print(s1.isdisjoint(s2))#True
print(s1.isdisjoint(s3))#False

五、集合的数学操作

  • 交集
  • 并集
  • 差集
  • 对称差集
'''
交集操作
'''
s1={10,20,30,40}
s2={20,30,40,50,60}

print(s1.intersection(s2))
print(s1 & s2) # & 与 intersection()方法等价——求交集操作

'''
并集操作
'''
print(s1)
print(s2)
print(s1.union(s2))
print(s1 | s2) # | 与union()方法等价

'''
差集操作
'''
print(s1.difference(s2))
print(s1 - s2) # - 与difference()方法等价

'''
对称差集
'''
print(s1.symmetric_difference(s2))
print(s1 ^ s2)# ^ 与symmertric_difference()方法等价

六、集合生成式

'''
列表生成式
'''
lst=[i*i for i in range(6)]
print(lst,type(lst))

'''
集合生成式
'''
demo={i*i for i in range(6)}
print(demo,type(demo))

运算结果:

[0, 1, 4, 9, 16, 25] <class 'list'>
{0, 1, 4, 9, 16, 25} <class 'set'>

  

posted @ 2021-07-07 11:34  小秦同学在上学  阅读(88)  评论(0编辑  收藏  举报