python集合set相关操作

定义:

1.不同元素组成

2.无序

3.集合中的元素必须是不可变类型

创建集合

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

1.定义可变集合

1
2
3
>>> set_test  =  set ( 'hello' )
>>> set_test
{ 'h' 'l' 'e' 'o' }

2.定义不可变集合

1
2
3
4
5
6
>>> set_test  =  set ( 'hello' )
>>> set_test
{ 'h' 'l' 'e' 'o' }   # 由此可见集合中的元素不可重复,都是不同的
>>> n_set_test  =  frozenset (set_test)
>>> n_set_test
frozenset ({ 'h' 'l' 'e' 'o' })

集合运算

 集合之间也可进行数学集合运算(例如:并集、交集等),可用相应的操作符或方法来实现。

子集

  子集,为某个集合中一部分的集合,故亦称部分集合。

  使用操作符 < 执行子集操作,同样地,也可使用方法 issubset() 完成。

1
2
3
4
5
6
7
8
9
>>> A  =  set ( 'abcd' )
>>> B  =  set ( 'cdef' )
>>> C  =  set ( "ab" )
>>> C < A
True          # C 是 A 的子集
>>> C < B
False
>>> C.issubset(A)
True        

并集 

  一组集合的并集是这些集合的所有元素构成的集合,而不包含其他元素。

  使用操作符 | 执行并集操作,同样地,也可使用方法 union() 完成。

1
2
3
4
>>> A | B
{ 'c' 'b' 'f' 'd' 'e' 'a' }
>>> A.union(B)
{ 'c' 'b' 'f' 'd' 'e' 'a' }

交集

  两个集合 A 和 B 的交集是含有所有既属于 A 又属于 B 的元素,而没有其他元素的集合。

扫描二维码关注公众号,回复: 5942055 查看本文章

  使用 & 操作符执行交集操作,同样地,也可使用方法 intersection() 完成。

1
2
3
4
>>> A & B
{ 'c' 'd' }
>>> A.intersection(B)
{ 'c' 'd' }

差集

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

  使用操作符 - 执行差集操作,同样地,也可使用方法 difference() 完成。

1
2
3
4
>>> A  -  B
{ 'b' 'a' }
>>> A.difference(B)
{ 'b' 'a' }

对称差

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

  使用 ^ 操作符执行差集操作,同样地,也可使用方法 symmetric_difference() 完成。

1
2
3
4
>>> A ^ B
{ 'b' 'f' 'e' 'a' }
>>> A.symmetric_difference(B)
{ 'b' 'f' 'e' 'a' }

  

集合方法

1.add 向集合中添加元素

1
2
3
4
>>> s  =  { 1 2 3 4 5 6 }
>>> s.add( "s" )
>>> s
{ 1 2 3 4 5 6 's' }

2.clear 清空集合

1
2
3
4
>>> s  =  { 1 2 3 4 5 6 }
>>> s.clear()
>>> s
set ()

3.copy 返回集合的浅拷贝

1
2
3
4
>>> s  =  { 1 2 3 4 5 6 }
>>> new_s  =  s.copy()
>>> new_s
{ 1 2 3 4 5 6 }

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

1
2
3
4
5
>>> s  =  { 1 2 3 4 5 6 }
>>> s.pop()   # pop删除时是无序的随机删除
1
>>> s
{ 2 3 4 5 6 }

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

1
2
3
4
>>> s  =  { 1 2 3 4 5 6 }
>>> s.remove( 3 )
>>> s
{ 1 2 4 5 6 }

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

1
2
3
4
>>> s  =  { 1 2 3 4 5 6 }
>>> s.discard( "sb" )
>>> s
{ 1 2 3 4 5 6 }

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

1
2
3
4
5
6
>>> 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 将集合的并集作为一个新集合返回

1
2
3
4
5
6
>>> 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 将两个或多个集合的差集作为一个新集合返回 

1
2
3
4
5
6
7
8
9
10
>>> 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 将两个集合的对称差作为一个新集合返回(两个集合合并删除相同部分,其余保留) 

1
2
3
4
>>> s  =  { 1 2 3 4 5 6 }
>>> s2  =  { 3 4 5 6 7 8 }
>>> s.symmetric_difference(s2)
{ 1 2 7 8 }

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

1
2
3
4
5
6
7
>>> s  =  { 'p' 'y' }
>>> s.update([ 't' 'h' 'o' 'n' ])     # 添加多个元素
>>> 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()  用自己和另一个的交集来更新这个集合

1
2
3
4
5
>>> s  =  { 'a' 'b' 'c' 'd' 'q' }
>>> s2  =  { 'c' 'd' 'e' 'f' }
>>> s.intersection_update(s2)    # 相当于s = s - s2
>>> s
{ 'c' 'd' }

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

1
2
3
4
5
6
7
>>> 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

1
2
3
4
5
6
7
>>> 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

1
2
3
4
5
6
7
>>> 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() 从这个集合中删除另一个集合的所有元素

1
2
3
4
5
6
7
8
9
>>> 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() 用自己和另一个的对称差来更新这个集合

1
2
3
4
5
6
7
8
9
10
11
12
>>> 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 }

集合与内置函数

下述内置函数通常作用于集合,来执行不同的任务。

函数 描述
all() 如果集合中的所有元素都是 True(或者集合为空),则返回 True。
any() 如果集合中的所有元素都是 True,则返回 True;如果集合为空,则返回 False。
enumerate() 返回一个枚举对象,其中包含了集合中所有元素的索引和值(配对)。
len() 返回集合的长度(元素个数)
max() 返回集合中的最大项
min() 返回集合中的最小项
sorted() 从集合中的元素返回新的排序列表(不排序集合本身)
sum() 返回集合的所有元素之和

猜你喜欢

转载自www.cnblogs.com/lokerx/p/10734178.html