python开发入门——set的使用


Posted in Python onSeptember 03, 2020

介绍

本文主要介绍Python中set的基本知识和使用。

Python中什么是set

dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。

有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时,set就派上用场了。

set 持有一系列元素,这一点和list很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。

创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:

>>> s = set(['A', 'B', 'C'])

可以查看 set 的内容:

>>> print s
set(['A', 'C', 'B'])

请注意,上述打印的形式类似 list, 但它不是list,仔细看还可以发现,打印的顺序和原始 list 的顺序有可能是不同的,因为set内部存储的元素是无序的。

因为set不能包含重复的元素,所以,当我们传入包含重复元素的 list 会怎么样呢?

>>> s = set(['A', 'B', 'C', 'C'])
>>> print s
set(['A', 'C', 'B'])
>>> len(s)
3

结果显示,set会自动去掉重复的元素,原来的list有4个元素,但set只有3个元素。

Python之 访问set

由于set存储的是无序集合,所以我们没法通过索引来访问。
访问 set中的某个元素实际上就是判断一个元素是否在set中。
例如,存储了班里同学名字的set:

>>> s = set(['Adam', 'Lisa', 'Bart', 'Paul'])

我们可以用 in 操作符判断:
Bart是该班的同学吗?

>>> 'Bart' in s
True

Bill是该班的同学吗?

>>> 'Bill' in s
False

bart是该班的同学吗?

>>> 'bart' in s
False

看来大小写很重要,'Bart' 和 'bart'被认为是两个不同的元素。

Python之 set的特点

set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。

set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。

最后,set存储的元素也是没有顺序的。

set的这些特点,可以应用在哪些地方呢?

星期一到星期日可以用字符串'MON', 'TUE', ... 'SUN'表示。

假设我们让用户输入星期一至星期日的某天,如何判断用户的输入是否是一个有效的星期呢?

可以用 if 语句判断,但这样做非常繁琐:

x = '???' # 用户输入的字符串
if x!= 'MON' and x!= 'TUE' and x!= 'WED' ... and x!= 'SUN':
  print 'input error'
else:
  print 'input ok'

注意:if 语句中的...表示没有列出的其它星期名称,测试时,请输入完整。

如果事先创建好一个set,包含'MON' ~ 'SUN':

weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])

再判断输入是否有效,只需要判断该字符串是否在set中:

x = '???' # 用户输入的字符串
if x in weekdays:
  print 'input ok'
else:
  print 'input error'

这样一来,代码就简单多了。

Python之 遍历set

由于 set 也是一个集合,所以,遍历 set 和遍历 list 类似,都可以通过 for 循环实现。
直接使用 for 循环可以遍历 set 的元素:

>>> s = set(['Adam', 'Lisa', 'Bart'])
>>> for name in s:
...   print name
... 
Lisa
Adam
Bart

注意: 观察 for 循环在遍历set时,元素的顺序和list的顺序很可能是不同的,而且不同的机器上运行的结果也可能不同。

Python之 更新set

由于set存储的是一组不重复的无序元素,因此,更新set主要做两件事:
一是把新的元素添加到set中,二是把已有元素从set中删除。

添加元素时,用set的add()方法:

>>> s = set([1, 2, 3])
>>> s.add(4)
>>> print s
set([1, 2, 3, 4])

如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了:

>>> s = set([1, 2, 3])
>>> s.add(3)
>>> print s
set([1, 2, 3])

删除set中的元素时,用set的remove()方法:

>>> s = set([1, 2, 3, 4])
>>> s.remove(4)
>>> print s
set([1, 2, 3])

如果删除的元素不存在set中,remove()会报错:

>>> s = set([1, 2, 3])
>>> s.remove(4)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
KeyError: 4

所以用add()可以直接添加,而remove()前需要判断。

结语

以上就是python开发入门——set的使用的详细内容,更多关于python set的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中__init__和__new__的区别详解
Jul 09 Python
python使用multiprocessing模块实现带回调函数的异步调用方法
Apr 18 Python
Python实现的文本编辑器功能示例
Jun 30 Python
matplotlib作图添加表格实例代码
Jan 23 Python
pycharm在调试python时执行其他语句的方法
Nov 29 Python
pyttsx3实现中文文字转语音的方法
Dec 24 Python
关于Python中的向量相加和numpy中的向量相加效率对比
Aug 26 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
Python自带的IDE在哪里
Jul 01 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
Jan 29 Python
使用anaconda安装pytorch的实现步骤
Sep 03 #Python
解决Python安装cryptography报错问题
Sep 03 #Python
解决python打开https出现certificate verify failed的问题
Sep 03 #Python
详解torch.Tensor的4种乘法
Sep 03 #Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 #Python
python开发入门——列表生成式
Sep 03 #Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 #Python
You might like
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
限制文本字节数js代码
2007/03/06 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
js正确获取元素样式详解
2009/08/07 Javascript
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
python3 kubernetes api的使用示例
2021/01/12 Python
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
美国汽车交易网站:Edmunds
2016/08/17 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
新领导上任欢迎词
2014/01/13 职场文书
十佳美德少年事迹材料
2014/02/05 职场文书
电视购物广告词
2014/03/19 职场文书
关于学习的演讲稿
2014/05/10 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
北京青年观后感
2015/06/15 职场文书
三好学生竞选稿范文
2019/08/21 职场文书
Python入门学习之类的相关知识总结
2021/05/25 Python
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技