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根据出生日期返回年龄的方法
Mar 26 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
Django 中使用流响应处理视频的方法
Jul 20 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
python 二维数组90度旋转的方法
Jan 28 Python
pycharm配置pyqt5-tools开发环境的方法步骤
Feb 11 Python
Django用户认证系统 组与权限解析
Aug 02 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 Python
在django-xadmin中APScheduler的启动初始化实例
Nov 15 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
Python下opencv库的安装过程及问题汇总
Jun 11 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
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
header导出Excel应用示例
2014/01/24 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
试用php中oci8扩展
2015/06/18 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
JS常见问题整理(持续更新)
2013/08/06 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
信息滚动效果的实例讲解
2017/09/18 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
python中xrange用法分析
2015/04/15 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
基于python代码批量处理图片resize
2020/06/04 Python
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
机电职业生涯规划书范文
2014/03/08 职场文书
运动会5000米加油稿
2015/07/21 职场文书
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
Python利用FlashText算法实现替换字符串
2022/03/31 Python