集合(set)
- 不同元素(无重复)
- 无序
- 元素必须是不可变类型的对象,集合本身是可变类型。
-作用:去重;关系测试,测试两组数据之间的交集、并集、差集等关系。
test1 = [1,2,'a','b']
Set_test_1 = set(test1)
print(Set_test1) # 输出:{'b',1,2,'a'}
Set_test_2 = set('hello world')
print(Set_test_2) # 输出:{'h',' ','o','l','e','w','r','d'}
集合的分类:可变集合、不可变集合
- 可变集合set:可添加和删除元素,非可哈希的,不同用作字典的键,也不可用于其他集合的元素。
- 不可变集合frozenset:与上恰恰相反。
集合的相关操作
#1.创建集合,集合没有自己的语法格式,所以只能通过set()和frozenset()方法创建
s_one = set('your')
s_two = frozenset('name')
print(s_one) #{'o', 'y', 'u', 'r'} <class 'set'>
print(s_two) #{'a', 'n', 'm', 'e'} <class 'frozenset'>
#2.访问集合,集合无法切片,也没有键存在。所以只能采用循环遍历或者用in,not in来访问或判断集合元素。
s_one = set('your')
for i in s_one:
print(i)
s_two = set('name')
print('a' in s_two)
print('b' in s_two)
#3.更新集合。
s_one.add('hh') #作为一个元素添加进去
print(s_one) #{'u', 'o', 'r', 'hh', 'y'}
s_one.update('abc') #添加多个元素
print(s_one) #{'u', 'o', 'r', 'c', 'b', 'hh', 'y', 'a'}
s_one.remove('hh') #删除一个元素
#del:删除集合本身
集合之间的关系运算
子集。为某个集合中的部分集合,使用 < 或issubset()方法完成。
并集。一组集合的并集是这些集合的所有元素构成的集合,而不包含其他元素。使用 | 或union()方法完成操作。
交集。集合A和集合B的交集是指两集合都有的元素的集合。使用 &或者intersection()方法完成。
- 差集。集合A与集合B的差集是所有属于A且不属于B的集合。使用 - 或difference()方法完成。
- 对称差。两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合。使用 ^ 或者symmetric_difference()方法完成。
# 子集
>>> A = set('abcdef')
>>> B = set('abcdeg')
>>> B < A
True
>>> B.issubset(A)
True
# 并集
>>> B | A
{'c', 'b', 'g', 'f', 'e', 'a', 'd'}
>>> B.union(A)
{'c', 'b', 'g', 'f', 'e', 'a', 'd'}
# 交集
>>> A & B
{'c', 'b', 'e', 'a', 'd'}
>>> A.intersection(B)
{'c', 'b', 'e', 'a', 'd'}
# 差集
>>> A - B
{'f'}
>>> A.difference(B)
{'f'}
# 对称差
>>> A ^ B
{'f', 'g'}
>>> A.symmetric_difference(B)
{'f', 'g'}
集合中的方法:
1 clear 清空集合
2 copy 返回集合的浅拷贝
3 pop 删除并返回 任意的集合元素(如果集合为空,会引发 KeyError)
4 discard 删除集合中的一个元素(如果元素不存在,则不执行任何操作)