龙空技术网

python之集合知识点总结

皛心 210

前言:

今天各位老铁们对“python子集”都比较重视,你们都想要学习一些“python子集”的相关知识。那么小编同时在网上汇集了一些关于“python子集””的相关文章,希望你们能喜欢,各位老铁们快快来学习一下吧!

集合的定义

集合(set)是一组0至多个无序、不重复的不可变对象。集合的底层结构也是散列表(hash table),可以快速查找集合内的元素,是一种以空间换时间的数据结构。

set1 = {'今日', '头条', '关于', '集合','案例'}for i in set1:    print(i)# 多次运行上述代码验证,可以发现每次打印的顺序都不一样,说明是无序的。
集合的创建空集合,set()。
set1 = set()print(type(set1))out:<class 'set'>
1个元素的集合,花括号将其包围。
set1 = {'今日'}print(type(set1))out:<class 'set'>
多个元素的集合,用花括号将所有元素包围,元素之间用逗号隔开。
set1 = {'今日', '头条', '关于', '集合','案例'}for i in set1:    print(i)out:关于案例今日集合头条
其他类型转换成集合。
tupl1 = ('name', 'age', 'money', 'height')list1 = ["Mike", 20, 8000, 180]dict1 = {'name': 'Mike', 'age': 20, 'money': 8000, 'height': 180}set1 = set(tupl1)set2 = set(list1)set3 = set(dict1)print(set1, type(set1))print(set2, type(set2))print(set3, type(set3))out:{'money', 'height', 'name', 'age'} <class 'set'>{8000, 180, 'Mike', 20} <class 'set'>{'money', 'height', 'name', 'age'} <class 'set'>
推导式,创建方法和列表推导式如出一辙。
set1 = {i for i in range(10)}print(set1, type(set1))out:{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} <class 'set'>
集合的访问集合比较特殊,没有直接访问元素的方法。但可以对集合for循环遍历元素。
set1 = {'头条', 5, 4, 3, '集合', 2, 1, '测试'}for i in set1:    print(i)out:头条23451测试集合
集合的增加通过add方法添加元素。add的参数只可接收不可变对象(数字、字符串、元组),不可接收可变对象(列表、字典、集合)。
set1 = {'头条', 3, '集合', 2, 1, '测试'}set1.add(('abc','bcd'))print(set1)out:{1, 2, 3, '头条', '集合', '测试', ('abc', 'bcd')}
通过update方法添加。update的参数可以是不可变对象,也可以是可变对象(如果嵌套了可变对象会报错)。
set1 = {'头条', 3, '集合', 2, 1, '测试'}set2 = [[i, j] for i in range(5, 8) for j in range(8, 10)]# set1.update(set2) 报错,因为set2内部元素是列表,不能转成不可变对象set3 = [i for i in range(5, 8)]set1.update(set3) # 成功,因为set3内部元素是数字,可转成不可变对象print(set1)out:{1, 2, 3, '测试', 5, 6, 7, '头条', '集合'}
集合的删除del:可直接删除集合本身,但不能指定删除集合的元素。
set1 = {'头条', 3, '集合', 2, 1, '测试'}del set1
pop方法:无参数方法,随机删除一个元素并返回。
set1 = {'头条', 3, '集合', 2, 1, '测试'}print(set1.pop())out:集合
remove方法:移除指定元素,若该元素不存在会报错,无返回值。
set1 = {'头条', 3, '集合', 2, 1, '测试'}set1.remove('头条')print(set1)# set1.remove(5) 5b不是set1的元素,移除时会报KeyErrorout:{1, 2, 3, '集合', '测试'}
discard方法:移除指定元素,若该元素不存在不报错,无返回值。
set1 = {'头条', 3, '集合', 2, 1, '测试'}set1.discard(5)set1.discard(1)print(set1)out:{2, 3, '集合', '头条', '测试'}
clear方法:清空集合内容,保留集合本身,在循环体中需要清空集合时优先用这个方法,而不要新建集合,因为新建的开销相对较大。
set1 = {'头条', 3, '集合', 2, 1, '测试'}set1.clear()print(set1)out:{}
集合的运算并集:集合A和集合B所有元素。集合A | 集合B

集合A是黄圈,集合B是红圈,并集是黄、红、橙三色整体。

set_a = {0, 1, 2, 3, 4}set_b = {3, 4, 5, 6, 7}set_c = set_a.union(set_b)  #等价于 set_c = set_a | set_bprint(set_c)out:{0, 1, 2, 3, 4, 5, 6, 7}
交集:集合A和集合B共有的元素。集合A & 集合B

集合A是黄圈,集合B是红圈,交集是2圈重叠部分->橙色。

set_a = {0, 1, 2, 3, 4}set_b = {3, 4, 5, 6, 7}set_c = set_a.intersection(set_b) # 返回集合a和b的交集,等价于set_c= set_a & set_bset_a.intersection_update() # 直接把集合a中不是交集的元素去掉print(set_c)print(set_a)out:{3, 4}{3, 4}
差集:集合A中有而集合B中没有的元素。集合A - 集合B

集合A是黄圈,集合B是红圈,差集是黄色部分(黄圈去掉橙色部分)

set_a = {0, 1, 2, 3, 4}set_b = {3, 4, 5, 6, 7}set_c = set_a.difference(set_b) # 返回集合a和b的差集set_a.difference_update(set_b) # 直接把集合a中不是差集的元素去掉print(set_c)print(set_a)out:{0, 1, 2}{0, 1, 2}
对等差分:集合A和B的并集再去除集合A和B的交集。
set_a = {0, 1, 2, 3, 4}set_b = {3, 4, 5, 6, 7}set_c = set_a.symmetric_difference(set_b) # 返回集合a和b的对等差分set_a.symmetric_difference_update(set_b) # 把集合a改成集合a和b的对等差分print(set_c)print(set_a)out:{0, 1, 2, 5, 6, 7}{0, 1, 2, 5, 6, 7}
集合的查询对集合的元素做in运算。
set1 = {'头条', 3, '集合', 2, 1, '测试'}print(5 in set1)print(1 in set1)out:FalseTrue
有无交集:isdisjoint方法,判断集合A和B有没有交集,有返回False,没有返回True。
set_a = {0, 1, 2, 3, 4}set_b = {3, 4, 5, 6, 7}set_c = {8, 9, 10}print(set_a.isdisjoint(set_b))print(set_a.isdisjoint(set_c))out:FalseTrue
是否子集:issubset方法,判断集合A是不是集合B的子集,是返回True,不是返回False。
set_a = {3, 4}set_b = {3, 4, 5, 6, 7}set_c = {8, 9, 10}print(set_a.issubset(set_b))print(set_c.issubset(set_b))out:TrueFalse
是否父集:issuperset方法,判断集合A是不是集合B的父集,是返回True,不是返回False。
set_a = {3, 4}set_b = {3, 4, 5, 6, 7}set_c = {8, 9, 10}print(set_b.issuperset(set_a))print(set_b.issuperset(set_c))out:TrueFalse
集合的其他方法

集合的内置方法非常丰富,除了上述说过的方法外,还有len和copy。

len,返回集合的元素长度。copy,建立集合的副本,内容一致,id不同。(注意:嵌套结构要用deepcopy)。

以下是案例:

set_a = {0, 1, 2, 3, 4}print(len(set_a))set_b = set_a.copy()print(id(set_a), id(set_b))out:52269718817472 2269718817024
集合的特殊用法

集合有去重功能,非常强大。关于集合去重功能的运用我举2个特殊的用法:

一行代码判断是否有重复元素。

list1 = [1, 1, 2, 3, 4, 5]list2 = [1, 2, 3, 4, 5, 6]str1 = "aabbcdefg"str2 = "abcdefghi"print(len(set(list1)) == len(list1)) # 不相等表示有重复print(len(set(list2)) == len(list2)) # 相等表示无重复print(len(set(str1)) == len(str1)) # 不相等表示有重复print(len(set(str2)) == len(str2)) # 相等表示无重复out:FalseTrueFalseTrue
二行代码实现去重并保持原有顺序。
list1 = [1, 1, 2, 3, 4, 5]list2 = list(set(list1))list2.sort(key=list1.index)print(list2)out:[1, 2, 3, 4, 5]

标签: #python子集 #python中集合定义