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中除法使用的注意事项
Aug 21 Python
Python入门篇之对象类型
Oct 17 Python
解决python2.7 查询mysql时出现中文乱码
Oct 09 Python
python定向爬取淘宝商品价格
Feb 27 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
python同步两个文件夹下的内容
Aug 29 Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 Python
教你如何使用Python实现二叉树结构及三种遍历
Jun 18 Python
使用Djongo模块在Django中使用MongoDB数据库
Jun 20 Python
python四种出行路线规划的实现
Jun 23 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 Ajax乱码
2008/04/09 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
js日期联动示例
2014/05/02 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
vue使用prop可以渲染但是打印台报错的解决方式
2019/11/13 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
python中文编码问题小结
2014/09/28 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
python取代netcat过程分析
2018/02/10 Python
python书籍信息爬虫实例
2018/03/19 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
加拿大时装零售商:Influence U
2018/12/22 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
房地产促销活动方案
2014/03/01 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
外出考察学习心得体会
2016/01/18 职场文书
68行Python代码实现带难度升级的贪吃蛇
2022/01/18 Python
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs