set集合知识点小结
数学定义:集合是指具有某种特定性质的具体的或抽象的对象汇总而成的集体。
编程定义:set 对象是由具有唯一性的 hashable 对象所组成的无序多项集。
特性:
确定性:给定一个集合,任给一个元素,该元素只能属于或者不属于该集合
互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。
运算:并(union),交(intersection),差(difference),对称差集(sysmmetric different)
创建集合
#setname = {value,value,……}
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
#setname = set(iteration)
basket2 = set(('apple', 'pear', 'banana'))
a = set('abcdefg')
b = set([1,2,3,4,5])
c = set()#如果要创建空集合,只能使用set()函数实现。如果使用{}创建集合,那么python解释器会将它视为一个空字典
#集合生成式
#{exp for value in collection if condtion}
d = {num for num in range (1,20) if num%3 == or num%5 == 0}
基本操作
1,增加
#1,add()方法:setname.add(element).
#注意:添加的元素,只能是不可变元素,包括数字,字符串,元组;不能添加列表,集合,字典这类可变的数据。
set_demo1 = {11, 2.1, True, 4+5j, 'python', (1,2,3)}
set_demo1.add('天下第一')
#2,update()方法:setname.updata(others):更新集合,添加来自other内的所有元素。也可以写成:setname |= others
set_demo1.update({1, 10, 100, 1000})
set_demo1 |= {1,10,100,1000}
2,删除
#remove()方法:setname.remone(element)。删除set集合中的指定元素。
set_demo2 = {(1, 2, 3), (4+5j), 10, 100, 11, 2.1, True, 'python', '天下第一'}
set_demo2.remove(11)
#diacard()方法:setname.discard(element)。如果不确定要删除的元素再不再集合中,可以使用此方法,当集合中元素不存在时,不会报错。
set_demo2.discard('天下第一')
set_demo2.discard('码农')
#pop()方法:setname.pop()。从集合中移除并返回任意一个元素,如果集合为空则会引发报错 。
set_demo2.pop()
#clear():setname.clear。从集合中移除所有元素
3,其他运算
#成员运算
#element in setname :检查x是否为set集合的成员
#element not in setname :检查x是否非set集合的成员
#比较运算
set_demo3 = {1,2,3,4,5,6}
set_demo4 = {3,4,5}
set_demo5 = {9,8}
set_demo4 < set_demo3 #判断set_demo4是否为set_demo3的真子集
set_demo4 <= set_demo3 #检测set_demo4是否为set_demo3的子集
set_demo3 > set_demo4 #检测set_demo3是否为set_dmeo4的真超集
set_demo3 >= set_demo4 #检测set_demo3是否为set_demo4的超集
#交并差运算
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
set1 & set2
set1.intersection(set2) #交集运算
set1 &= set2 #更新集合,
set1 | set2
set1.union(set2) #并集运算
set1 - set2
set1.difference(set2) #差集运算
set1^set2
set1.symmetric_difference(set2) #对称差集运算
4,更新
#update()方法:setname.updata(others):更新集合,添加来自other内的所有元素。也可以写成:
#setname |= others
set3 = {x*2 for x in range(10)}
set4 = {12,14,16,18,19,20}
set3.update({1, 10, 100})
set3 |= {1,10,100}
#结合集合的并差交运算
set3 &= set4 #更新集合,set3中只保留其中在set4中也存在的元素
set3 -= set4 #更新集合,移除在set4中也存在的元素
set3 ^= set4 #更新集合, set3中只保留set3与set4中独有的元素
5,集合的遍历
集合虽然是一个可迭代对象,但因为集合无序性的特性,它无法通过下标进行查询和找出其中的元素。我们可以通过循环语句遍历其中的元素。
set5 = {1,2,3,4,'我爱python',(5,2,1)}
#fro……in……循环
for i in set5:
print(set5)
#enumerate()方法
for index,k in enunerate(set5):
print(index,k)
不可变集合frozenset
frozenset冻结集合,即不可变集合。frozenset的元素是固定的,一旦创建后就无法增加、删除和修改。其最大的优点是使用hash算法实现,所以执行速度快,而且frozenset可以作为dict字典的Key,也可以成为其他集合的元素。
frozenset() #frozenset()
frozenset([1, 2, 3, 'abc'])
#frozenset集合作为dic的key和value
f = frozenset([1,2,3])
d = {f:'a'} #{frozenset({1, 2, 3}): 'a'}
d2 = {'a':f} #{'a': frozenset({1, 2, 3})}
#set集合不可以作为dic的key和value
f2 = set([1, 2, 3])
d3 = {f2:1} #TypeError: unhashable type: 'set'