拿着铲子的土豆-Python 集合 set
集合是一个无序的,不重复的数据组合,它的主要作用如下:
w 去重,把一个列表变成集合,就自动去重了
w 关系测试,测试两组数据之前的交集、差集、并集等关系
w 去重,把一个列表变成集合,就自动去重了
w 关系测试,测试两组数据之前的交集、差集、并集等关系
1、创建集合
由于集合没有自己的语法格式,只能通过集合的工厂方法set()和frozenset()创建
可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键(字典的键必须可哈希),也不能做其他集合的元素(集合是不能作为字典的键的,因为集合可变)
不可变集合(frozenset):与上面恰恰相反
s1=set('Cath')
print(s1,type(s1))#{'h','a','C','t'}<class'set'> 集合无序,set类
s2=frozenset('Tang')
print(s2,type(s2))#frozenset({'n','T','a','g'})<class'frozenset'>
由于集合没有自己的语法格式,只能通过集合的工厂方法set()和frozenset()创建
可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键(字典的键必须可哈希),也不能做其他集合的元素(集合是不能作为字典的键的,因为集合可变)
不可变集合(frozenset):与上面恰恰相反
s1=set('Cath')
print(s1,type(s1))#{'h','a','C','t'}<class'set'> 集合无序,set类
s2=frozenset('Tang')
print(s2,type(s2))#frozenset({'n','T','a','g'})<class'frozenset'>
2、访问集合
由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或迭代器, 或使用in、not in来访问或判断集合元素。
s1=set('Cath')
print(s1)#{'C','h','a','t'}
print('a' in s1)#True
print('b' in s1)#False
#s1[1] #TypeError:'set 'object does not suppor tindexing
for i ins1:
print(i)
#h
#a
#t
#C
3、更新集合
可使用以下内建方法来更新:
s.add() #添加一个元素 add() takes exactly one argument
s.update() #添加多个元素。 参数会作为一个序列, 逐个加入(不重复), 参数可以放一个列表
s.remove() #删除元素
s.pop() #随机删除一个元素
s.clear()#清楚集合中的所有元素
del s #删除集合
s=set('cat')
s.update('ooo')
print(s)#{'c','t','a','o'}
s.update(['c',12])
print(s)#{'t','o',12,'a','c'}
s.remove('t')
print(s)#{'o',12,'a','c'}
s.pop()#{'a','o','c',12}
print(s)#{'o','c',12}因为集合无序,随机删除一个
s.clear()
print(s)#set() 清空所有元素,剩下一个空集合
del s
print(s)#NameError:name 's' is not defined
由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或迭代器, 或使用in、not in来访问或判断集合元素。
s1=set('Cath')
print(s1)#{'C','h','a','t'}
print('a' in s1)#True
print('b' in s1)#False
#s1[1] #TypeError:'set 'object does not suppor tindexing
for i ins1:
print(i)
#h
#a
#t
#C
3、更新集合
可使用以下内建方法来更新:
s.add() #添加一个元素 add() takes exactly one argument
s.update() #添加多个元素。 参数会作为一个序列, 逐个加入(不重复), 参数可以放一个列表
s.remove() #删除元素
s.pop() #随机删除一个元素
s.clear()#清楚集合中的所有元素
del s #删除集合
s=set('cat')
s.update('ooo')
print(s)#{'c','t','a','o'}
s.update(['c',12])
print(s)#{'t','o',12,'a','c'}
s.remove('t')
print(s)#{'o',12,'a','c'}
s.pop()#{'a','o','c',12}
print(s)#{'o','c',12}因为集合无序,随机删除一个
s.clear()
print(s)#set() 清空所有元素,剩下一个空集合
del s
print(s)#NameError:name 's' is not defined
4. 集合的操作
交集,并集,差集,对称差集(反向交集), 父集(超集),子集
a=set([1,2,3,4,5])
b=set([4,5,6,7,8])
#intersection()交集
print(a.intersection(b))#{4,5}
print(a&b)#{4,5}
#union()并集
print(a.union(b))#{1,2,3,4,5,6,7,8}
print(a|b)#{1,2,3,4,5,6,7,8}
#difference()差集
print(a.difference(b))#{1,2,3}a里面有的,b里面没有的
print(a-b)#{1,2,3}a里面有的,b里面没有的
print(b.difference(a))#{8,6,7}b里面有的,a里面没有的
print(b-a)#{1,2,3}b里面有的,a里面没有的
#symmetric_difference()对称差集
print(a.symmetric_difference(b))#{1,2,3,6,7,8},反向交集,those in a not in b,and in b not in a
print(a^b)#{1,2,3,6,7,8},or print(b^a)
#父集/超集issuperset()
print(a.issuperset(b))#False a是否包含b
print(a>b)#False
#子集issubset()
print(a.issubset(b))#False,a是否是b的子集
print(a<b)#False,a是否是b的子集
交集,并集,差集,对称差集(反向交集), 父集(超集),子集
a=set([1,2,3,4,5])
b=set([4,5,6,7,8])
#intersection()交集
print(a.intersection(b))#{4,5}
print(a&b)#{4,5}
#union()并集
print(a.union(b))#{1,2,3,4,5,6,7,8}
print(a|b)#{1,2,3,4,5,6,7,8}
#difference()差集
print(a.difference(b))#{1,2,3}a里面有的,b里面没有的
print(a-b)#{1,2,3}a里面有的,b里面没有的
print(b.difference(a))#{8,6,7}b里面有的,a里面没有的
print(b-a)#{1,2,3}b里面有的,a里面没有的
#symmetric_difference()对称差集
print(a.symmetric_difference(b))#{1,2,3,6,7,8},反向交集,those in a not in b,and in b not in a
print(a^b)#{1,2,3,6,7,8},or print(b^a)
#父集/超集issuperset()
print(a.issuperset(b))#False a是否包含b
print(a>b)#False
#子集issubset()
print(a.issubset(b))#False,a是否是b的子集
print(a<b)#False,a是否是b的子集
# in or not in, len()
s1=set('abc')
s3=set('ab')
print(s1)#{'a','c','b'}
print(s3)#{'b','a'}
print(s3 in s1)#False s3不是s1的元素
print('a' in s1)#True
print('f' in s1)#False
print('f' not in s1)#True
print(len(s1))#3 s1中元素的个数
s1=set('abc')
s3=set('ab')
print(s1)#{'a','c','b'}
print(s3)#{'b','a'}
print(s3 in s1)#False s3不是s1的元素
print('a' in s1)#True
print('f' in s1)#False
print('f' not in s1)#True
print(len(s1))#3 s1中元素的个数

浙公网安备 33010602011771号