set集合操作

 

1. set集合是一个无序且不重复的集合

注意: 

(1)由不同元素组成,且每个元素不能重复

(2)无序的(在Python2是无序的,在Python3中是有序的)

(3)集合中的元素必须是不可变类型(不可变类型指的是集合中的元素不可以修改,因此常用来作为字典的键)

(4)集合没有切片操作

 

2. 创建集合

(1)直接创建

s = {1,2,3,4,5,6,7,8}

(2)定义可变集合: set集合中的元素可以动态的增加或删除

set_test = set('hello')

>>> set_test

{'e''h''l''o'}    # 由此可见集合中的元素不可重复,都是不同的

(3)定义不可变集合: frozenset不可变集合中的元素不可改变

n_set_test = frozenset('hello')

>>> n_set_test

frozenset({'e', 'h', 'l', 'o'})

注意:

对于并集,交集,差集等的返回值,与最左边的操作数具有相同的类型.例如s&t取交集, s集合是一个set类型的集合,t集合是一个frozenset类型的集合,则返回

的结果将是set类型的集合.

3. 集合运算

采用相应的操作符或方法来实现.

(1)子集: 使用操作符 < 判断是否是子集, 也可使用issubset( )

A = set('abcd')

B = set('cdef')

C = set("ab")

>>> C < A

True

>>> C < B

False

>>> C.issubset(A)

True

(2)并集: 使用操作符 | 求并集, 也可使用union( )

>>> A | B

{'a', 'b', 'c', 'd', 'e', 'f'}

>>> A.union(B)

{'a', 'b', 'c', 'd', 'e', 'f'}

(3)交集: 使用操作符 & 求交集, 也可使用intersection( )

>>> A & B

{'c', 'd'}

>>> A.intersection(B)

{'c', 'd'}

(4)差集: A与B的差集是所有属于A且不属于B的元素构成的集合

使用操作符 - 求差集, 也可以使用difference( )

>>> A - B

{'a', 'b'}

>>> A.difference(B)

{'a', 'b'}

(5)对称差: 两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合

使用操作符 ^ 求对称差集, 也可以使用symmetric_difference( )

>>> A ^ B

{'a', 'b', 'e', 'f'}

>>> A.symmetric_difference(B)

{'a', 'b', 'e', 'f'}

 

4. 集合方法

(1)add向集合中添加元素

>>> s = {1, 2, 3, 4, 5, 6}

>>> s.add("s")

>>> s

{1, 2, 3, 4, 5, 6, 's'}

(2)clear清空集合

>>> s = {1, 2, 3, 4, 5, 6}

>>> s.clear()

>>> s

set()

(3)copy返回集合的浅拷贝

>>> s = {1, 2, 3, 4, 5, 6}

>>> new_s = s.copy()

>>> new_s

{1, 2, 3, 4, 5, 6}

new_s.add('s')

>>> new_s

{1, 2, 3, 4, 5, 6, 's'}

>>> s

{1, 2, 3, 4, 5, 6}

(4)pop删除并返回任意的集合元素(如果集合为空,会引发KeyError)

>>> s = {1, 2, 3, 4, 5, 6}

>>> s.pop()  # pop删除时是无序的随机删除

1

>>> s

{2, 3, 4, 5, 6}

(5)remove删除集合中的一个元素(如果元素不存在,会引发KeyError)

>>> s = {1, 2, 3, 4, 5, 6}

>>> s.remove(3)

>>> s

{1, 2, 4, 5, 6}

(6)discard删除集合中的一个元素(如果元素不存在,则不执行任何操作)

>>> s = {1, 2, 3, 4, 5, 6}

>>> s.discard("sb")

>>> s

{1, 2, 3, 4, 5, 6}

(7)intersection将两个集合的交集作为一个新的集合返回

>>> s = {1, 2, 3, 4, 5, 6}

>>> s2 = {3, 4, 5, 6, 7, 8}

>>> s.intersection(s2)

{3, 4, 5, 6}

>>> s&s2  # 可以达到相同的效果

{3, 4, 5, 6}

(8)union将集合的并集作为一个新集合返回

>>> s = {1, 2, 3, 4, 5, 6}

>>> s2 = {3, 4, 5, 6, 7, 8}

>>> print(s.union(s2))

{1, 2, 3, 4, 5, 6, 7, 8}

>>> print(s|s2) # 用 | 可以达到相同效果

{1, 2, 3, 4, 5, 6, 7, 8}

(9)difference将两个或多个集合的差集作为一个新集合返回

>>> s = {1, 2, 3, 4, 5, 6}

>>> s2 = {3, 4, 5, 6, 7, 8}

>>> print("差集:",s.difference(s2)) # 去除s和s2中相同元素,删除s2 保留s中剩余元素

差集: {1, 2}

>>> print("差集:",s2.difference(s))  # 去除s和s2中相同元素,删除s2 保留s2中剩余元素<br>

差集: {8, 7}

>>> print("差集:",s - s2) # 符号 - 可以达到相同结果

差集: {1, 2}

>>> print("差集:",s2 - s) # 符号 - 可以达到相同结果

差集: {8, 7}

(10)symmetric_difference将两个集合的对称差作为一个新集合返回(两个集合合并删除相同部分,其余保留)

>>> s = {1, 2, 3, 4, 5, 6}

>>> s2 = {3, 4, 5, 6, 7, 8}

>>> s.symmetric_difference(s2)

{1, 2, 7, 8}

(11)update用自己和另一个的并集来更新这个集合

>>> s = {'p', 'y'}

>>> s.update(['t', 'h', 'o', 'n']) # 添加多个元素, s = s | s2

>>> s

{'p', 't', 'o', 'y', 'h', 'n'}

>>> s.update(['H', 'e'], {'l', 'l', 'o'}) # 添加列表和集合

>>> s

{'p', 'H', 't', 'l', 'o', 'y', 'e', 'h', 'n'}

(12)intersection_update( ) 用自己和另一个的交集来更新这个集合

>>> s = {'a', 'b', 'c', 'd', 'q'}

>>> s2 = {'c', 'd', 'e', 'f'}

>>> s.intersection_update(s2) # 相当于s = s - s2

>>> s

{'c', 'd'}

(13)isdisjoint( ) 如果两个集合有一个空交集,返回True

>>> s = {1, 2}

>>> s1 = {3, 4}

>>> s2 = {2, 3}

>>> s.isdisjoint(s1)

True # s 和 s1 两个集合的交集为空返回 True

>>> s.isdisjoint(s2)

False # s 和 s2 两个集合的交集为 2 不是空 所有返回False

(14)issubset( ) 如果另一个集合包含这个集合,返回True

>>> s = {1, 2, 3}

>>> s1 = {1, 2, 3, 4}

>>> s2 = {2, 3}

>>> s.issubset(s1)

True # 因为 s1 集合 包含 s 集合

>>> s.issubset(s2)

False # s2 集合 不包含 s 集合

(15) issuperset( ) 如果这个集合包含另一个集合,返回True

>>> s = {1, 2, 3}

>>> s1 = {1, 2, 3, 4}

>>> s2 = {2, 3}

>>> s.issuperset(s1)

False # s 集合不包含 s1 集合

>>> s.issuperset(s2)

True # s 集合包含 s2 集合

(16) difference_update( ) 从这个集合中删除另一个集合的所有元素

>>> s = {1, 2, 3}

>>> s1 = {1, 2, 3, 4}

>>> s2 = {2, 3}

>>> s.difference_update(s2)

>>> s

{1} # s2中的2,3 s集合中也有2,3 所以保留1

>>> s1.difference_update(s2)

>>> s1

{1, 4}

(17)symmetric_difference_update( ) 用自己和另一个的对称差来更新这个集合

>>> s = {1, 2, 3}

>>> s1 = {1, 2, 3, 4}

>>> s2 = {2, 3}

>>> s1.symmetric_difference_update(s)

>>> s1

{4}

>>> s1.symmetric_difference_update(s2)

>>> s1

{2, 3, 4}

>>> s.symmetric_difference_update(s2)

>>> s

{1}

 

5 集合与内置函数

all( )          如果集合中的所有元素都是True(或者集合为空), 则返回True

any( )        如果集合中有元素为True, 则返回True; 如果集合为空,则返回False

enumerate( )     返回一个枚举对象,其中包含了集合中所有元素的索引和值(配对)

len( )      返回集合的长度

max( )    返回集合的最大值

min( )     返回集合的最小值

sorted( )    从集合的元素返回新的排序列表(不排序集合本身),返回的是列表, sort( )函数不能用于集合排序,因为其实list内置方法

sum( )      返回集合的所有元素之和

仅适用于可变集合set的函数:

s.add(x)

s.clear()

s.discard(value)

s.remove(value)

s.pop()

s.difference_update(x) 

s.update(x)

s.symmetric_difference_update(x) 

s.intersection_update(x)

总结: 对于可变集合set和不可变集合frozenset, 后者由于不能改变,所以对内部元素修改的方法后者没有,也不能update

 

转载 https://www.cnblogs.com/suendanny/p/8597596.html

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值