什么是set

set和list类似,拥有一系列元素,但是set和list不一样,set里面的元素是不允许重复的,而list里面可以包含相同的元素;set与list的另一个区别是,set里面的元素是没有顺序的

创建set的方式是使用set(),并传入一个list,list的元素将会被转换成set的元素。

需要注意的是,上述打印的形式类似 list, 但它不是 list,仔细看还可以发现,打印的顺序和原始 list 的顺序有可能是不同的,因为set内部存储的元素是无序的。
另外,set不能包含重复的元素,我们传入重复的元素看看会发生什么

可以看到,在传入set()的list中,包含了重复的元素,但是打印的时候,相同的元素只保留了一个,重复的元素都被去掉了,这是set的一个重要特点

读取set元素

由于set里面的元素是没有顺序的,因此不能像list那样通过索引来访问。访问set中的某个元素实际上就是判断一个元素是否在set中,这个时候我们可以使用in来判断某个元素是否在set中。
比如,存储了班里同学名字的set

请问'alice' ,'bob','bobby'是班里面的同学吗?

注意因为set元素是区分大小写的,必须大小写完全匹配,才能判断该元素在set里面

添加set元素

我们通过set()传入list的方法创建了set,如果set在使用过程中需要往里面添加元素,这个时候应该怎么添加呢?
set提供了add()方法,我们可以使用add()方法,往set里面添加元素。
比如,班里面来了新的同学,名字叫Gina

names = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
name_set = set(names)
name_set.add('Gina')
print(name_set) 

这样'Gina'已经添加到name_set里面去了。对于set,如果添加一个已经存在的元素,不会报错,也不会改变什么

names = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
name_set = set(names)
name_set.add('Alice')
print(name_set) 

可有些时候需要批量往set里面添加元素,如果一个一个add是比较麻烦的,有没有批量往set里面添加元素的方法呢?
set提供了update()方法,可以一次性给set添加多个元素。
比如,新来了一批同学,名字分别是['Hally',  'Isen',  'Jenny',  'Karl'],则可以使用update()方法,批量往set中添加

names = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
new_names = ['Hally', 'Isen', 'Jenny', 'Karl']
name_set = set(names)
name_set.update(new_names)
print(name_set)

删除set元素

和list、dict一样,有时候我们也需要考虑删除set的元素

set提供了remove()方法允许我们删除set中的元素

name_set = set(['Jenny', 'Ellena', 'Alice', 'Candy', 'David', 'Hally', 'Bob', 'Isen', 'Karl'])
name_set.remove('Jenny')
print(name_set)

需要注意的是,如果remove的元素不在set里面的话,那么将会引发错误。

因此,使用remove()方法,我们需要格外小心,需要提前判断要remove()的元素是否在set里面,确保存在后,再进行remove。

操作set的其他方法

不会报错的删除方法discard()

除了使用remove()方法删除元素以外,还可以使用discard()方法删除元素,并且,和remove()不同的是,当元素不存在时,使用discard()并不会引发错误,所以使用discard()是更加高效的一个方法。

name_set = set(['Jenny', 'Ellena', 'Alice', 'Candy', 'David', 'Hally', 'Bob', 'Isen', 'Karl'])
name_set.discard('Jenny')
print(name_set)
name_set.discard('Jenny')
print(name_set)

清除所有元素的方法clear()

dict一样,set也提供了clear()方法,可以快速清除set中的所有元素。

name_set = set(['Jenny', 'Ellena', 'Alice', 'Candy', 'David', 'Hally', 'Bob', 'Isen', 'Karl'])
print(name_set)
name_set.clear()
print(name_set) 

集合的子集和超集

set提供方法判断两个set之间的关系,比如两个集合set,判断其中一个set是否为另外一个set的子集或者超集

s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 判断s1是否为s2的子集
s1.issubset(s2) # ==> True
# 判断s2是否为s1的超集
s2.issuperset(s1) # ==> True

判断集合是否重合

有时候需要判断两个集合是否有重合的地方,如果使用传统的方法,需要使用for循环一个一个的去判断,非常麻烦,set提供isdisjoint()方法,可以快速判断两个集合是否有重合,如果有重合,返回False,否则返回True

s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
s1.isdisjoint(s2) # ==> False,因为有重复元素1、2、3、4、5

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. python xlrd读取excel所有数据_python读取excel进行遍历/xlrd模块操作
  2. html恢复按钮按下前的状态,如何通过点击按钮暂停和恢复html页面的执行
  3. 算法题:实现一个IP白名单过滤器
  4. 由熊猫烧香引发的思考
  5. 区块链基础知识系列 第三课 区块链中的默克尔树
  6. Oracle八大性能视图之v$sort_usage_temp
  7. 开源文件服务器file-service介绍
  8. 手型向下 点击一下 福昕_PPT多张缩略图点击放大展示
  9. 单调队列优化的背包问题
  10. LeetCode 1481. 不同整数的最少数目(计数+排序+贪心)
  11. webservice 原理
  12. Linux常用指令2
  13. 全局 快捷键_表格快捷键
  14. 最新微信养号、使用、解封必看的注意事项
  15. Java常见的加密解密
  16. 表单-微信小程序前端制作切片演示
  17. Python2.7字符编码详解
  18. pandas读取txt文件第一行列名困扰我许久的'点'
  19. python字典的遍历方式:向列表一样通过索引遍历字典的值
  20. 从零开始搞起 Disney BRDF源码编译(含踩坑经历)

热门文章

  1. 酒庄页面HTML5,基于jsp的酒庄管理系统-JavaEE实现酒庄管理系统 - java项目源码
  2. C++——tuple类型
  3. 并行与分布式计算导论—性能分析
  4. 数字文档管理与免费文件共享服务:了解关键差异
  5. 文献解读:通过微生物组研究锡金喜马拉雅温泉含硫泥浆沉积物的宏病毒组及其功能多样性
  6. 益智汉诺塔的递推公式
  7. NPDP认证续证有什么要求吗?
  8. 【小黑JavaScript入门系列之脑力训练一《一阶段练习剩余合集》】
  9. Python urllib3模块详解
  10. 组合数奇偶性的判断(附证明)