Python——集合是一个非常之牛逼的数据比较方式

什么是集合?对似懂非懂或者被集合搞晕了的同学可以来看一下。
    首先不想说太多概念性的东西,免得又晕了!

请看下面我写的例子,看完之后自然就知道啥是集合以及如何去应用它

#变量a是一个集合类型
a = set()
print(type(a))

#定义一个列表,并存入很多重复的数字
dt = [12,9,2,8,4,9,2,7,4,5,6,11,5,7,5,7,9,8,7,2]
for i in dt: #遍历列表
    a.add(i) #将列表中的每一个元素添加进集合

#打印集合,发现,自动去掉重复的数字了
print(a)

#5存在于集合中吗?
print(5 in a)

#遍历集合
for item in a:
    print(item)

#将集合转化成列表
set_list = list(a)
print(set_list)
print(type(set_list))

那么,集合还涉及到下面几个牛逼的玩意:

并集:
    它将两个集合作为参数,并返回一个包含全部存在于两个集合中任意一个的元素的新集合,用union()方法, 操作符是:"|"
交集:
    它接收第2个集合为参数,返回的是仅包含同时存在于两个集合的那些元素,intersection方法实现,操作符是:"&"
差集:
    它告诉我们哪些是剩下的元素,它是一个存储于或是存在于这个集合或是另一个集合,但不是同时存在于两个集合的对象的集合
    symmetric_difference方法实现,操作符是:"-"

继续看例子

a = {1,2,3,4,5}
b = {6,2,3,7}

#求a和b的并集,将两组数据中共同存在的数字去除掉后,生成一个不存在重复数字的新集合
print(a.union(b))

#求a和b的交集,将两组数据中共有的数字提取出来,并生成一个新的集合,让我们知道这两组数据中哪些数字都存在于两组数据里
print(a.intersection(b))

#求a和b的差集,将两组数据中所没有的数字提取出来后,生成一个新的集合
print(a.symmetric_difference(b))

#注意:他们的结果取决于谁是调用者,谁是参数,上面的3条例子中,a集合是调用者,b集合是参数

#a集合中的所有数字都存在于b集合的话,则返回true, a是调用者,b是参数
print(a.issubset(b))

#b集合作为参数,b集合中的所有元素都存在于a集合中的话,返回true
print(a.issuperset(b))

#想要知道全部只存在于a集合而不存在于b集合的元素
print(a.difference(b)) #结果是1,4,5
#反之
print(b.difference(a)) #结果是6和7

总结:
    通过测试说明,集合可以用来操作另一个集合,集合不仅仅只是一个容器
    那么,应用场景一般有如下:
        1、对两处不同的数据,如果要快速的结合起来去做分析,那么请用集合
        2、那么快速的结合起来的目的一般是干嘛呢?,比如想知道两处数据中哪些是重复的,哪些是不同的
        
因此:
    集合是一个非常之牛逼的数据比较方式

原文地址:http://blog.51cto.com/freshair/2064765

时间: 2024-10-07 22:22:41

Python——集合是一个非常之牛逼的数据比较方式的相关文章

Python多重继承引发的问题——牛逼的super

少说废话多做事先上一个图,此图用win7下的画图工具所画,当然,这不是重点 需要清楚的一个事情是: 任何类,都默认并隐式的继承object类(根类),在上面的图中,Transformers类同时继承了Car和Ship类.那么Car和Ship又隐式的继承了object类,注意,这个object类不是我自己定义的 而是python的. 根据上面的图,编写代码 class Car:     #描述汽车     call_car_record = 0 #记录调用次数     def __init__(s

发现一个国内牛逼的maven仓库,速度真的太快了

前天网上下了一个项目,在公司还好,网络比较流畅,很快就把依赖下好了:回家的时候,想耍耍,结果下了一天也没把依赖下好,速度是几k每秒,甚至一k每秒,哎~心都碎了,网上一搜,结果发现了一个惊天的用nexus搭建的maven私服,阿里云的,那下载速度真是杠杠的: 配置很简单,修改下conf下的settings.xml文件,添加如下镜像配置: <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven&

一个在线牛逼的集成工具集(各种工具都有)

这里面有开发常用工具.运维常用工具.编码转换.加密解密.图片.文档等等神操作,话不多说,直接上图: 可以满足日常工作所需.获取在线工具集:链接:https://pan.baidu.com/s/1nwmvafn0Yh10o8ujjRT5iA 提取码:btty 原文地址:https://blog.51cto.com/1439337369/2372259

如何成为牛逼的程序员

著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:vczh链接:http://zhuanlan.zhihu.com/p/19796639来源:知乎 我有一个想法,不一定对. 第一篇文章(第一篇文章就贡献给投票了 - vczh的日常 - 知乎专栏)果然给了我灵感耶,标题的图片就是从评论里截出来的.为了以后回答那些层出不穷的月经问题,我决定写下这么一篇文章,讲一下我对牛逼的程序员的理解.为什么我要讲这个呢,当然首先我还是觉得自己是很牛逼的,不然我就不会讲这个了(误 一个牛逼的

【转】如何成为一个牛逼的程序员

来自:http://www.cnblogs.com/preacher/p/4205277.html   说的很有道理!!! 上边这个网站不是原文网站,,,原文网站地址:http://blog.csdn.net/foruok/article/details/42061247 该作者应该是主要为程序员职业规划知道,,,相关的  程序员漫谈系列  值得一看!!! ------------------------------------------------ 作为程序员,身边总是有牛逼的前辈.后辈或者

如何定义一个牛逼的前端工程师

有软件工程方面的研究说,对于开发者个体而言,最优秀的开发者的生产效率约为平均值的2倍,而优秀的开发者会吸引其它优秀的人,或者激励与帮助团队中的其它成员,最终使团队之间的生产效率差异达到10倍之多. 所谓牛逼的工程师,就是那些个体效率是其它人2倍,形成团队之后达到10倍差异的一群人. 前端领域这几年发展速度非常快,人才分布呈两级分化趋势,大家都在说缺前端,其实缺的是牛逼前端,对于低端的前端,培训机构一直在量产,但是无法满足要求.很多情况下,一个牛逼前端对于团队的价值是再多低端前端都无法提供的. 牛

如何成为一个牛逼的程序员

“成为一个杰出的程序员!”,每个程序员都是这么想的,虽然嘴上不说!这是一个人人自称“屌丝”,骨子里却都认为自己是“高富帅”(或者认为自己终究会成为高富帅)的年代! 大部分时候,我们一直在努力成为一名优秀的程序员.但是,更多的时候,我们并不知道如何成为一个优秀的程序员! 怎样成为一个优秀的程序员? 完美主义?注重细节?懂用户需求?恩,听起来都有道理,但又觉得很虚,难以实施! 选(fang)择(fa)比努力重要,一味只会埋头苦干的人,注定成不了杰出的程序员,有时候,我们需要停下来:思考! 我不是一个

【项目总结】:如何做一个牛逼的Team leader?

随着ITOO高校云平台3.1项目的结束,我们各种各样的总结也被提上了日程.Java版本的所有开发人员和Donet版本的所有开发人员坐在一起进行了关于项目开发管理的头脑风暴,虽然我只是Donet开发组的一个子系统--考评系统的模块开发人员,但是对于项目开发管理也有自己的一些思考和看法. 众所周知,作为一个Teamleader,是要考虑很多很多事情的,如何调动团队成员的积极性,如何统筹安排团队成员分工合作,使工作效率达到最佳,如何根据开发人员的技术水平.经验以及个人性格等诸多因素为他们分配任务,以使

【项目总结】:怎样做一个牛逼的Team leader?

随着ITOO高校云平台3.1项目的结束,我们各种各样的总结也被提上了日程. Java版本号的全部开发者和Donet版本号的全部开发者坐在一起进行了关于项目开发管理的头脑风暴,尽管我仅仅是Donet开发组的一个子系统--考评系统的模块开发者.可是对于项目开发管理也有自己的一些思考和看法. 众所周知.作为一个Teamleader,是要考虑非常多非常多事情的,怎样调动团队成员的积极性,怎样统筹安排团队成员分工合作,使工作效率达到最佳,怎样依据开发者的技术水平.经验以及个人性格等诸多因素为他们分配任务.