Python-set的使用
set
- 介绍
- set类型的特点
- set的基本方法
- 集合的添加、删除元素
- 集合运算
- 底层原理
介绍
在Python 3中,set是一种无序、可变的集合数据类型,它由唯一的、不可变的元素组成。可以用大括号{}或者set()函数来创建一个set对象。
set类型的特点
set中的元素是唯一的,不存在重复的元素(天生去重)。
set是无序的,不能通过索引访问元素。
set是可变的,可以通过add()、remove()等方法添加或删除元素。
set中的元素必须是不可变的,即不能包含列表、字典等可变类型。(可hash对象)
一个只有key的字典 --set
可变数据类型 list、dict、set
set的基本方法
Python 3 中 list 对象有很多有用的方法,以下是其中一些常用的方法:
- append(x): 将元素 x 添加到列表的末尾。
- extend(iterable): 将可迭代对象 iterable 中的元素添加到列表的末尾。
- insert(i, x): 在指定索引 i 处插入元素 x。
- remove(x): 删除列表中第一个值为 x 的元素。
- pop([i]): 删除并返回索引为 i 的元素。如果未指定索引,则删除并返回最后一个元素。
- index(x): 返回第一个值为 x 的元素的索引。如果 x 不在列表中,则引发 ValueError。
- count(x): 返回列表中值为 x 的元素的数量。
- sort(key=None, reverse=False): 对列表进行排序。key 为可选参数,用于指定一个函数,用于从每个列表元素中提取一个用于比较的键。reverse 为可选参数,如果为 True,则按降序排列;否则按升序排列。
- reverse(): 将列表中的元素反转。
还有其他方法可以使用,请参考 Python 官方文档以获取更多信息。
集合的添加、删除元素
s1={1,2,3}
s1.add(4)
##update 只能放可迭代对象
s1.update("abc")## remove 如果删除的元素不在集合,会抛出异常s1.remove("b")### discar 即使元素不存在,也不会抛出异常s1.discard("x")print(s1)
--------------------------------
集合运算
s1 = {1,2,3}
s2 = {2,3,4}
print("交集",s1 & s2)
print("并集",s1 | s2)
print("s1-s2差集",s1 -s2)
print("s2-s1差集",s2 -s1)
##在s1 或 在 s2 里面,但不同时在两个集合里面
print("对称差集",s1 ^ s2)
底层原理
Python 3中set的底层实现仍然是基于哈希表(hash table)的。
在Python 3中,set对象的哈希表底层实现与Python 2中的实现略有不同,主要区别在于:
在Python 3中,set的哈希表采用开放寻址(open addressing)的方式来解决哈希冲突,而不是使用链表。
Python 3中的哈希表采用稀疏化(sparseness)技术,使得哈希表可以使用更少的空间来存储元素,从而减少空间占用。
当我们创建一个set对象时,Python会自动创建一个空的哈希表,并将set的元素依次插入哈希表中。每个元素在哈希表中的位置由其哈希值确定,相同哈希值的元素会存储在同一个桶(bucket)中,如果该桶已经被占用,Python会采用开放寻址的方式,从该桶开始向后寻找空闲的位置,直到找到空闲位置为止。当我们需要对set进行查找、插入或删除操作时,Python会先计算元素的哈希值,然后在哈希表中查找对应的桶,最后在桶内进行线性查找或删除。
与Python 2一样,Python 3也会动态调整哈希表的大小,以保证哈希表的装填因子在一定范围内,从而保证哈希表的性能。同时,Python 3中的哈希表还采用了稀疏化技术,使得哈希表可以使用更少的空间来存储元素,从而减少空间占用。
Python-set的使用相关推荐
- Github配置(git+vscode+python+jupyter)
①下载git 打开 git bash 工具的用户名和密码存储 $ git config --global user.name "Your Name" $ git config -- ...
- 【实验楼】python简明教程
①终端输入python进入 欣赏完自己的杰作后,按 Ctrl + D 输入一个 EOF 字符来退出解释器,你也可以键入 exit() 来退出解释器. ②vim键盘快捷功能分布 ③这里需要注意如果程序中 ...
- 【Kaggle Learn】Python 5-8
五. Booleans and Conditionals Using booleans for branching logic x = True print(x) print(type(x))''' ...
- 【Kaggle Learn】Python 1-4
[Kaggle Learn]Python https://www.kaggle.com/learn/python 一. Hello, Python A quick introduction to Py ...
- 使用python愉快地做高数线代题目~
今天接触到了python,发现真是极易上手啊!对比c语言是什么鬼东西= = 诶,等下,看完教学文章发现TA在下面写了这句话 如果做了前面的内容你可能已被吸引了,觉得c语言真的是废材! 不...不是的. ...
- python 位运算与等号_Python 运算符
和大多数语言一样,Python也有很多运算符,并且运算符跟其他语言的运算符大同小异接下来一一介绍: 算术运算符: 运算符描述实例 +加 - 两个对象相加a+b的输出结果是30 -减 - 得到复数或者一 ...
- python减小内存占用_如何将Python内存占用缩小20倍?
当程序执行过程中RAM中有大量对象处于活动状态时,可能会出现内存问题,特别是在对可用内存总量有限制的情况下. 下面概述了一些减小对象大小的方法,这些方法可以显著减少纯Python程序所需的RAM数量. ...
- python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...
本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...
- python程序如何执行死刑图片_如何判断对象已死
已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了: 引用计数 给对象添加一个引用计数器,每当有一个地方引用他,计算器就加 1:当引用失效时,计数器减 1:任何时刻计数器 ...
- Python gRPC 安装
1. 安装依赖库 sudo pip3 install grpcio sudo pip3 install protobuf sudo pip3 install grpcio_tools 2. 生成对应文 ...
最新文章
- AI 综述专栏 | 超长综述让你走近深度人脸识别
- 解决javah生成c头文件时找不到android类库的问题
- 清北NOIP训练营集训笔记——图论(提高组精英班)
- 搞懂 SQL 查询优化原理分析,秒速处理大数据量查询
- [渝粤教育] 中国地质大学 电路理论(新) 复习题 (2)
- HTML5实现Word中文字全环绕图片效果
- CentOS 6.5上安装Zabbix 2.4.8
- 如何配置Ubuntu17的软件库(sortware update)
- matlab r如何看曲线图,MATLAB 提取图片中的曲线数据重新画图
- cmd使用SBT构建scala项目
- maven-dependencyManagement和dependencies区别
- html语言pre,【已解决】html代码中用pre还是code表示程序代码以及如何指定代码的语音种类...
- l3119双闪_打印机进纸灯和墨水灯双灯齐闪 解决方法
- html做成分页,静态html分页
- 七种方式实现三栏布局
- 用计算机怎么管理小米路由器,小米路由器3G怎么设置?(电脑)
- TestCenter测试管理工具功能详解六(K)
- 更多字根例字 -- 字根 (2)
- live555源代码分析与代码下载链接
- 流氓软件卸载-MrWReSadse、Nexuser.exe、WRSvcmbdl.dll