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友情链接检查方法
Jul 08 Python
深入讲解Java编程中类的生命周期
Feb 05 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
解决python删除文件的权限错误问题
Apr 24 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
May 10 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
python多线程共享变量的使用和效率方法
Jul 16 Python
Python实现数值积分方式
Nov 20 Python
Python 实现递归法解决迷宫问题的示例代码
Jan 12 Python
Django中的session用法详解
Mar 09 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 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中AES加密解密的例子小结
2014/02/18 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
2012/03/01 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
js实现符合国情的日期插件详解
2017/01/19 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
Python开发常用的一些开源Package分享
2015/02/14 Python
django2 快速安装指南分享
2018/01/05 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
后勤工作职责
2013/12/22 职场文书
小学毕业寄语大全
2014/04/03 职场文书
讲解员培训方案
2014/05/04 职场文书
2015年敬老月活动总结
2015/03/27 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
优秀范文:读《红岩》有感3篇
2019/10/14 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
Mysql分库分表之后主键处理的几种方法
2022/02/15 MySQL
Python+pyaudio实现音频控制示例详解
2022/07/23 Python