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基础教程之udp端口扫描
Feb 10 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 Python
Python2.7.10以上pip更新及其他包的安装教程
Jun 12 Python
python+Splinter实现12306抢票功能
Sep 25 Python
python requests post多层字典的方法
Dec 27 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
Jul 23 Python
Numpy之reshape()使用详解
Dec 26 Python
Python下利用BeautifulSoup解析HTML的实现
Jan 17 Python
python smtplib发送多个email联系人的实现
Oct 09 Python
python 多进程和协程配合使用写入数据
Oct 30 Python
用PYTHON去计算88键钢琴的琴键频率和音高
Apr 10 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读取javascript设置的cookies的代码
2010/04/12 PHP
php导入导出excel实例
2013/10/25 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
简单方法判断JavaScript对象为null或者属性为空
2014/09/26 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
使用pycharm设置控制台不换行的操作方法
2019/01/19 Python
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
简历里的自我评价范文
2014/02/24 职场文书
大学毕业寄语大全
2014/04/10 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书