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操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
python在windows和linux下获得本机本地ip地址方法小结
Mar 20 Python
python装饰器实例大详解
Oct 25 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
python selenium自动上传有赞单号的操作方法
Jul 05 Python
mac安装pytorch及系统的numpy更新方法
Jul 26 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
python提取包含关键字的整行数据方法
Dec 11 Python
python使用response.read()接收json数据的实例
Dec 19 Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 Python
python实现密度聚类(模板代码+sklearn代码)
Apr 27 Python
python+selenium小米商城红米K40手机自动抢购的示例代码
Mar 24 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+jquery实时显示网站在线人数的方法
2015/01/04 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
用pycharm开发django项目示例代码
2018/10/24 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
python学生管理系统开发
2019/01/30 Python
PyQt QCombobox设置行高的方法
2019/06/20 Python
关于递归的一道.NET面试题
2013/05/12 面试题
英语专业学生的自我评价
2013/12/30 职场文书
大四本科生的自我评价
2013/12/30 职场文书
旅游市场营销方案
2014/03/09 职场文书
大学生团日活动总结
2015/05/06 职场文书
早上好问候语大全
2015/11/10 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
用Python创建简易网站图文教程
2021/06/11 Python
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android