集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
- SET的分为 可变集合 和 不可变集合(frozon set)。
- 可变集合可以添加或者删除,但是frozon set 不可以
- 可变集合不是可哈希的,所以不可以做DICTIONARY的KEY。但是frozon set有哈希值,可以作为key值。
创建
set 和 list([])及dictionary({})不同,没有语法格式。只有用工厂方法 set() or frozenset() 创建。
list_1= [1,4,8,9,4,10,12] list_1 = set(list_1) print(list_1,type(list_1))
{1, 4, 8, 9, 10, 12} <class ‘set‘>
添加
list_3.add(‘c‘)print(list_3)list_4.update([888,777])print(list_4)
{1, 3, ‘c‘, 7}
{2, 4, 6, 777, 888}
删除
list_3.remove(3) #remove 和 discard 的区别在于是否报错。remove会,discard比较友好 - do nothing if the element does not exit in the set. print(list_3)
{1, ‘c‘, 7}
*pop() 随机删
关系测试
list_1 = set([1,4,8,9,4,10,12]) list_2 = set([2,3,4,8,11,12]) print(list_1.intersection(list_2)) #交集,可用 list_1 & list_2 代替
{8, 4, 12}
print(list_1.union(list_2)) #并集并去重,可用 list_1 | list_2 代替
{1, 2, 3, 4, 8, 9, 10, 11, 12}
print(list_1.difference(list_2)) #差集=in list_1 but not in list_2; 可用 list_1 - list_2
{1, 10, 9}
print(list_1.issubset(list_2)) #判断是否子集 print(list_1.issuperset(list_2)) #判断是否父集
False
print(list_1.symmetric_difference(list_2)) #对称差集:并集-交集部分; 可用 list_1 ^ list_2
{1, 2, 3, 9, 10, 11}
list_3 = set([1,3,7]) list_4 = set([2,4,6]) print(list_3.isdisjoint(list_4)) #是否完全无关?
True
成员关系 (in, not in) & 等价/不等价
和其他容器类型一样, set 仍旧支持 in 或 not in,等价不等价等操作符号, 同时由len()得到set 的基数(大小), 用for循环迭代集合的成员。但是不可以创建索引或切片。
时间: 2024-10-10 23:23:13