欢迎光临散文网 会员登陆 & 注册

第七章 组合数据-3集合Set

2023-07-06 16:20 作者:wangyanhpa  | 我要投稿

set是一个无序且不重复的元素在{}中用逗号隔开,元素为不可变对象。类似数学里集合的概念,我们可以对集合进行求差集、交集、并集等运算。如果这些基本概念不太懂,请做下面的选择题:

A跳过本节,不学了    B自己查查集合的概念和操作    C接着往下看看    D随便

我猜你选择C,所以接着看看能不能懂吧。

s1 = set('alvin')         #创建集合s1

s2= frozenset('yuan')    #创建冻结的集合s2,冻结后集合不能再添加或删除任何元素。

print(s1,type(s1))        #{'l', 'v', 'i', 'a', 'n'} <class 'set'>

print(s2,type(s2))        #frozenset({'n', 'y', 'a', 'u'}) <class 'frozenset'>

print('a' in s1)           #True

print('b' in s1)           #False

for i in s1:

    print(i)

集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素。

集合可使用以下方法来更新,但是注意只有可变集合才能更新,frozenset不可以更新。

s.add() 和 s.update()

#s1 = frozenset('alvin')

#print(s1)           #frozenset({'a', 'n', 'i', 'v', 'l'})

#s1.add("ccdc")      #AttributeError: 'frozenset' object has no attribute 'add'

s2 = set('alvin')

s2.add('mm')

print(s2)            # {'mm', 'l', 'n', 'a', 'i', 'v'}

s2.update('HO')      # 添加多个元素

print(s2)            # {'mm', 'l', 'n', 'a', 'i', 'H', 'O', 'v'}

 

删除集合可以使用s.remove()

s2 = set('alvin')

print(s2)                 # { 'l', 'n', 'a', 'i', 'v'}

s2.remove('l')

print(s2)                 # {'n', 'a', 'i','v'}

del s2                   #删除集合本身

#print(s2)                 #NameError: name 's2' is not defined

 

集合类型操作符

in ,not in

集合等价与不等价(==, !=)

 

子集、超集

s=set('alvinyuan')

s1=set('alvin')

print('v' in s)               # True

print(s1<s)                # True

 

联合(union)操作与集合的or操作其实等价的,联合符号有个等价的方法,union()。

s1=set('alvin')

s2=set('yuan')

s3=s1|s2                     #or操作

print(s3)                      #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}

print(s1.union(s2))              #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}

 

交集(&)与集合and等价,交集符号的等价方法是intersection()

s1=set('alvin')

s2=set('yuan')

s3=s1&s2                     #and操作

print(s3)                      #{'n', 'a'}

print(s1.intersection(s2))        #{'n', 'a'}

 

差集(-),等价方法是difference()

s1=set('alvin')

s2=set('yuan')

s3=s1-s2

print(s3)                      #{'v', 'i', 'l'}

 

print(s1.difference(s2))            #{'v', 'i', 'l'}

 

对称差集(^),对称差分是集合的XOR(‘异或’),取得的元素属于s1,s2但不同时属于s1和s2.其等价方法symmetric_difference()

s1=set('alvin')

s2=set('yuan')

s3=s1^s2

print(s3)                           #{'l', 'v', 'y', 'u', 'i'}

print(s1.symmetric_difference(s2))     #{'l', 'v', 'y', 'u', 'i'}

 

'''去重方式'''

lis = [1,2,3,4,1,2,3,4]

print(list(set(lis)))    #[1, 2, 3, 4]


第七章 组合数据-3集合Set的评论 (共 条)

分享到微博请遵守国家法律