【Python之旅】第二篇(七):集合

简介:

说明:

·类似于数学中学的集合,Python中的集合可以实现去重的功能,通过set()函数来实现:

·sets支持x in set, len(set)和 for x in set;

·作为一个无序的集合,sets 不记录元素位置或者插入点,因此,sets不支持indexing, slicing,或其它类序列(sequence-like)的操作;

·学习集合,主要是学习集合的一系列标准操作:集合创建、集合添加、集合删除、交并差集等;




1.创建集合:set()


1
2
3
4
5
6
7
8
9
10
11
>>> a = range( 10 )
>>> a
[ 0 1 2 3 4 5 6 7 8 9 ]
>>> a.insert( 3 , 8 )
>>> a.insert( 3 , 6 )
>>> a
[ 0 1 2 6 8 3 4 5 6 7 8 9 ]
>>>  set (a)
set ([ 0 1 2 3 4 5 6 7 8 9 ])
>>>  set ( 'boy' )
set ([ 'y' 'b' 'o' ])




2.集合添加:add()与update


--add()

·功能:把要添加的元素作为一个整体添加到集合中;

·演示如下:

1
2
3
4
5
6
>>> a =  set ( 'boy' )
>>> a
set ([ 'y' 'b' 'o' ])
>>> a.add( 'xpleaf' )
>>> a
set ([ 'y' 'b' 'xpleaf' 'o' ])

·add()的参数不能为列表和字典,但是可以为元组:

1
2
3
4
5
6
>>> b =  set ( 'Hello' )
>>> b
set ([ 'H' 'e' 'l' 'o' ])
>>> b.add(( 'xpleaf' , 'CL' ))
>>> b
set ([ 'H' , ( 'xpleaf' 'CL' ),  'e' 'l' 'o' ])


--update()

·功能:把要添加的元素拆分(如果不是单个字符),再一个一个地添加到集合中;

·演示如下:

1
2
3
4
5
6
7
8
>>> a
set ([ 'y' 'b' 'xpleaf' 'o' ])
>>> a.update( 'Python' )
>>> a
set ([ 'b' 'h' 'xpleaf' 'n' 'P' 'o' 'y' 't' ])
>>> a.update([ 1 , 2 , 3 ])
>>> a
set ([ 1 2 'b' 'h' 'xpleaf' 'n' 'P' 3 'o' 'y' 't' ])

·前面讲集合是不支持indexing的,所以这里看到新添加的元素在集合中是无序排列的;




3.集合删除:remove(),discard()与pop()


--remove()

·功能:从set中删除元素,如果不存在则引发KeyError;

·演示如下:

1
2
3
4
5
6
7
8
9
>>> a
set ([ 1 2 'b' 'h' 'xpleaf' 'n' 'P' 3 'o' 'y' 't' ])
>>> a.remove( 'b' )
>>> a
set ([ 1 2 'h' 'xpleaf' 'n' 'P' 3 'o' 'y' 't' ])
>>> a.remove( 'KeyError' )
Traceback (most recent call last):
   File  "<stdin>" , line  1 in  <module>
KeyError:  'KeyError'


--discard()

·功能:如果在set中存在该元素,则删除,无论存在与否,都没有提示;

·演示如下:

1
2
3
4
5
6
7
8
9
>>> a
set ([ 1 2 3 'h' 'xpleaf' 'n' 'P' 'o' 'y' 't' ])
>>>  import  tab
>>> a.discard( 'xpleaf' )
>>> a
set ([ 1 2 3 'h' 'n' 'P' 'o' 'y' 't' ])
>>> a.discard( 'CL' )
>>> a
set ([ 1 2 3 'h' 'n' 'P' 'o' 'y' 't' ])


--pop()

·功能:删除并返回set中一个不确定的元素;

·演示如下:

1
2
3
4
5
6
7
8
9
10
>>> a.pop()
1
>>> a
set ([ 2 3 'h' 'n' 'P' 'o' 'y' 't' ])
>>> a.pop()
2
>>> a.pop()
3
>>> a
set ([ 'h' 'n' 'P' 'o' 'y' 't' ])




4.集合数学操作


·进行数学操作需要了解一些集合操作符号和数学符号:

数学符号 Python符号
含义
-或\ - 差集,相对补集

&
交集

|
并集
取∩的补 ^ 对称差集

!=

不等于

= == 等于

in
属于

not in
不属于


--差集,相对补集:-

1
2
3
4
5
6
7
8
9
10
>>> a =  set (range( 10 ))
>>> b =  set (range( 15 ))
>>> a
set ([ 0 1 2 3 4 5 6 7 8 9 ])
>>> b
set ([ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ])
>>> b - a
set ([ 10 11 12 13 14 ])
>>> a - b
set ([])


--交集:&

1
2
>>> a & b
set ([ 0 1 2 3 4 5 6 7 8 9 ])

·也可以用intersection()函数实现:

1
2
>>> a.intersection(b)
set ([ 0 1 2 3 4 5 6 7 8 9 ])


--并集:|

1
2
>>> a | b
set ([ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ])

·也可以用union()函数实现:

1
2
>>> a.union(b)
set ([ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ])


--对称差集:^

1
2
3
4
5
set ([ 0 1 2 3 4 5 6 7 8 9 ])
>>> b
set ([ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ])
>>> a ^ b
set ([ 10 11 12 13 14 ])

·也可以用symmetric_difference()函数实现:

1
2
3
4
>>> a.symmetric_difference(b)
set ([ 10 11 12 13 14 ])
>>> b.symmetric_difference(a)
set ([ 10 11 12 13 14 ])


--等于与不等于:==与!=

1
2
3
4
>>> a == b
False
>>> a != b
True


--属于与不属于:in与not in

1
2
3
4
5
6
7
8
9
10
11
12
>>> a
set ([ 0 1 2 3 4 5 6 7 8 9 ])
>>> b
set ([ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ])
>>> a  in  b
False
>>> b  in  a
False
>>> a not  in  b
True
>>>  0  in  a
True

·指的是元素是否属于集合,而不是集合之间的包含;

·集合之间的包含(子集)可用:>、>=、<、<=等表示

1
2
3
4
>>> a >= b
False
>>> a <= b
True

·<=相当于函数issubset():

1
2
3
4
>>> a <= b
True
>>> a.issubset(b)    ===>a是b的子集
True

·>=相当于函数issuperset():

1
2
3
4
5
6
>>> a >= b
False
>>> a.issuperset(b)    ===>a不是b的超集,即a不包含b
False
>>> b.issuperset(a)    ===>b是a的超集,即b包含a
True




5.其它操作


--len()

·功能:测定集合的长度;

·演示如下:

1
2
3
4
>>> len(a)
10
>>> len(b)
15


--copy()

·功能:浅复制;

·前面已有提及,不再重复;


--hash()

·功能:返回参数的哈希值;

·演示如下:

1
2
3
4
5
6
7
8
>>> a
set ([ 0 1 2 3 4 5 6 7 8 9 ])
>>> b
set ([ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ])
>>> hash(a)
Traceback (most recent call last):
   File  "<stdin>" , line  1 in  <module>
TypeError: unhashable type:  'set'

·可以看到普通hash()函数的参数不能为set类型(列表也不行),但可以为字符串类型:

1
2
>>> hash( 'CL' )
8576051523077447

·只要数据量足够大,hash是有可能产生相同的hash值,更安全的为md5类型的hash值计算:

1
2
3
4
5
>>>  import  hashlib
>>> a =  'hello'
>>> a = hashlib.md5()
>>> a.hexdigest()
'd41d8cd98f00b204e9800998ecf8427e'

·可以看到产生的hash值中还包含有字母等字符,因此破解的难度会更大。






本文转自 xpleaf 51CTO博客,原文链接:http://blog.51cto.com/xpleaf/1695685,如需转载请自行联系原作者
相关文章
|
10月前
|
存储 JSON 算法
Python集合:高效处理无序唯一数据的利器
Python集合是一种高效的数据结构,具备自动去重、快速成员检测和无序性等特点,适用于数据去重、集合运算和性能优化等场景。本文通过实例详解其用法与技巧。
285 0
|
11月前
|
存储 索引 Python
python 集合的所有基础知识
python 集合的所有基础知识
1108 0
|
9月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
374 4
|
10月前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
1015 2
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
940 1
思科设备巡检命令Python脚本大集合
|
存储 缓存 安全
Python frozenset 集合详解:不可变集合的终极指南
frozenset是Python中一个常被忽视但极具价值的不可变集合类型。本文深入解析其本质、操作方法与应用场景,揭示其通过不可变性带来的安全性与性能优势。从底层实现到实战案例,涵盖字典键使用、缓存优化及类型注解等高级场景。同时对比性能数据,提供最佳实践指南,并展望Python 3.11+中的优化。掌握frozenset,可为代码带来更强健性与效率,适合多种特定需求场景。
556 5
|
存储 人工智能 索引
Python数据结构:列表、元组、字典、集合
Python 中的列表、元组、字典和集合是常用数据结构。列表(List)是有序可变集合,支持增删改查操作;元组(Tuple)与列表类似但不可变,适合存储固定数据;字典(Dictionary)以键值对形式存储,无序可变,便于快速查找和修改;集合(Set)为无序不重复集合,支持高效集合运算如并集、交集等。根据需求选择合适的数据结构,可提升代码效率与可读性。
1195 1
|
存储 缓存 API
解密 Python 集合的实现原理
解密 Python 集合的实现原理
455 12
|
存储 API 索引
Python 的集合是怎么实现的?
Python 的集合是怎么实现的?
230 9
|
存储 自然语言处理 数据处理
使用Python计算多个集合的交集详解
使用Python计算多个集合的交集详解
849 1

推荐镜像

更多