首页 > 代码库 > Python 基础 - Day 2 Learning Note - Set 集合

Python 基础 - Day 2 Learning Note - Set 集合

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系
  • 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))
View Code

 {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循环迭代集合的成员。但是不可以创建索引或切片。

Python 基础 - Day 2 Learning Note - Set 集合