set

  • 介绍
  • set类型的特点
  • set的基本方法
    • 集合的添加、删除元素
    • 集合运算
    • 底层原理

介绍

在Python 3中,set是一种无序、可变的集合数据类型,它由唯一的、不可变的元素组成。可以用大括号{}或者set()函数来创建一个set对象。

set类型的特点

  1. set中的元素是唯一的,不存在重复的元素(天生去重)。

  2. set是无序的,不能通过索引访问元素。

  3. set是可变的,可以通过add()、remove()等方法添加或删除元素。

  4. set中的元素必须是不可变的,即不能包含列表、字典等可变类型。(可hash对象)

  5. 一个只有key的字典 --set

可变数据类型 list、dict、set

set的基本方法

Python 3 中 list 对象有很多有用的方法,以下是其中一些常用的方法:

  1. append(x): 将元素 x 添加到列表的末尾。
  2. extend(iterable): 将可迭代对象 iterable 中的元素添加到列表的末尾。
  3. insert(i, x): 在指定索引 i 处插入元素 x。
  4. remove(x): 删除列表中第一个值为 x 的元素。
  5. pop([i]): 删除并返回索引为 i 的元素。如果未指定索引,则删除并返回最后一个元素。
  6. index(x): 返回第一个值为 x 的元素的索引。如果 x 不在列表中,则引发 ValueError。
  7. count(x): 返回列表中值为 x 的元素的数量。
  8. sort(key=None, reverse=False): 对列表进行排序。key 为可选参数,用于指定一个函数,用于从每个列表元素中提取一个用于比较的键。reverse 为可选参数,如果为 True,则按降序排列;否则按升序排列。
  9. 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中的实现略有不同,主要区别在于:

  1. 在Python 3中,set的哈希表采用开放寻址(open addressing)的方式来解决哈希冲突,而不是使用链表。

  2. Python 3中的哈希表采用稀疏化(sparseness)技术,使得哈希表可以使用更少的空间来存储元素,从而减少空间占用。

当我们创建一个set对象时,Python会自动创建一个空的哈希表,并将set的元素依次插入哈希表中。每个元素在哈希表中的位置由其哈希值确定,相同哈希值的元素会存储在同一个桶(bucket)中,如果该桶已经被占用,Python会采用开放寻址的方式,从该桶开始向后寻找空闲的位置,直到找到空闲位置为止。当我们需要对set进行查找、插入或删除操作时,Python会先计算元素的哈希值,然后在哈希表中查找对应的桶,最后在桶内进行线性查找或删除。

与Python 2一样,Python 3也会动态调整哈希表的大小,以保证哈希表的装填因子在一定范围内,从而保证哈希表的性能。同时,Python 3中的哈希表还采用了稀疏化技术,使得哈希表可以使用更少的空间来存储元素,从而减少空间占用。

Python-set的使用相关推荐

  1. Github配置(git+vscode+python+jupyter)

    ①下载git 打开 git bash 工具的用户名和密码存储 $ git config --global user.name "Your Name" $ git config -- ...

  2. 【实验楼】python简明教程

    ①终端输入python进入 欣赏完自己的杰作后,按 Ctrl + D 输入一个 EOF 字符来退出解释器,你也可以键入 exit() 来退出解释器. ②vim键盘快捷功能分布 ③这里需要注意如果程序中 ...

  3. 【Kaggle Learn】Python 5-8

    五. Booleans and Conditionals Using booleans for branching logic x = True print(x) print(type(x))''' ...

  4. 【Kaggle Learn】Python 1-4

    [Kaggle Learn]Python https://www.kaggle.com/learn/python 一. Hello, Python A quick introduction to Py ...

  5. 使用python愉快地做高数线代题目~

    今天接触到了python,发现真是极易上手啊!对比c语言是什么鬼东西= = 诶,等下,看完教学文章发现TA在下面写了这句话 如果做了前面的内容你可能已被吸引了,觉得c语言真的是废材! 不...不是的. ...

  6. python 位运算与等号_Python 运算符

    和大多数语言一样,Python也有很多运算符,并且运算符跟其他语言的运算符大同小异接下来一一介绍: 算术运算符: 运算符描述实例 +加 - 两个对象相加a+b的输出结果是30 -减 - 得到复数或者一 ...

  7. python减小内存占用_如何将Python内存占用缩小20倍?

    当程序执行过程中RAM中有大量对象处于活动状态时,可能会出现内存问题,特别是在对可用内存总量有限制的情况下. 下面概述了一些减小对象大小的方法,这些方法可以显著减少纯Python程序所需的RAM数量. ...

  8. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...

    本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...

  9. python程序如何执行死刑图片_如何判断对象已死

    已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了: 引用计数 给对象添加一个引用计数器,每当有一个地方引用他,计算器就加 1:当引用失效时,计数器减 1:任何时刻计数器 ...

  10. Python gRPC 安装

    1. 安装依赖库 sudo pip3 install grpcio sudo pip3 install protobuf sudo pip3 install grpcio_tools 2. 生成对应文 ...

最新文章

  1. AI 综述专栏 | 超长综述让你走近深度人脸识别
  2. 解决javah生成c头文件时找不到android类库的问题
  3. 清北NOIP训练营集训笔记——图论(提高组精英班)
  4. 搞懂 SQL 查询优化原理分析,秒速处理大数据量查询
  5. [渝粤教育] 中国地质大学 电路理论(新) 复习题 (2)
  6. HTML5实现Word中文字全环绕图片效果
  7. CentOS 6.5上安装Zabbix 2.4.8
  8. 如何配置Ubuntu17的软件库(sortware update)
  9. matlab r如何看曲线图,MATLAB 提取图片中的曲线数据重新画图
  10. cmd使用SBT构建scala项目
  11. maven-dependencyManagement和dependencies区别
  12. html语言pre,【已解决】html代码中用pre还是code表示程序代码以及如何指定代码的语音种类...
  13. l3119双闪_打印机进纸灯和墨水灯双灯齐闪 解决方法
  14. html做成分页,静态html分页
  15. 七种方式实现三栏布局
  16. 用计算机怎么管理小米路由器,小米路由器3G怎么设置?(电脑)
  17. TestCenter测试管理工具功能详解六(K)
  18. 更多字根例字 -- 字根 (2)
  19. live555源代码分析与代码下载链接
  20. 流氓软件卸载-MrWReSadse、Nexuser.exe、WRSvcmbdl.dll

热门文章

  1. STM32 TIM2重映射
  2. [Python黑帽] 三.编程实现IP及端口扫描器、实现多线程C段扫描器
  3. Python与兰顿蚂蚁
  4. java 周总结_Java本周总结1
  5. Kotlin高仿微信-第32篇-支付-我的零钱
  6. Unity利用WheelCollider制作汽车
  7. #define 中 \ 的作用
  8. python安装urllib3_CentOS7安装Certbot解决提示Python-urllib3安装失败
  9. 同宿舍的程序员毕业五年的现状:有人年薪百万,有人月薪一万(转)
  10. strtol函数、strtoul函数