day3 集合set()实例分析

    集合,我们在高中的时候专门学习过集合,并集,交集,差集等,下面来看一下集合的定义,如下:

集合(简称集)是数学中一个基本概念,它是集合论的研究对象,集合论的基本理论直到19世纪才被创立。最简单的说法,即是在最原始的集合论

——朴素集合论中的定义,集合就是“确定的一堆东西”。集合里的“东西”,叫作元素。

由一个或多个确定的元素所构成的整体叫做集合。若x是集合A元素,则记作xA。集合中的元素有三个特征:1.确定性(集合中的元素必须是

确定的) 2.互异性(集合中的元素互不相同。例如:集合A={1,a},则a不能等于1) 3.无序性(集合中的元素没有先后之分),如集合{3,4,5}和

{3,5,4}算作同一个集合。

我们知道,集合具有互异性,集合中的每个元素都是不同的。而且集合是无序的。与字典一样,没有顺序可言,并且集合中的元素都是确定的。我们来验证一下集合的形式。

    集合:(1)访问速度快;(2)天生解决了重复性的问题。

首先,互异性:

>>> s1 = set([11,22,33])
  >>> s1
  {33, 11, 22}
  >>> s1.add(11)
  >>> s1
  {33, 11, 22}
  >>> s1.add(33)
  >>> s1
  {33, 11, 22}
  >>> s1.add(44)
  >>> s1
  {33, 11, 44, 22}
    从上面我们可以看出,集合中的元素都是互异的,当我们向集合中添加相同的元素的时候,是程序虽然不会报错,但是集合里面不会出现两个相同元素的元素。如果集合中的元素是数字,那么只需键值。生成键--值列表。

确定性:

>>> s1.__contains__(11)
  True
  >>> s1.__contains__(12)
  False
    一个元素在集合中要么存在,要么不存在,因此,如果我们判断的时候,就只有真和假两种情况。

互异性:

我们知道,如果集合是互异性的,那么顺序不同元素相同的集合应该是相等的。那么就来验证一下:

>>> s1 = set([11,33,44,88])
  >>> s2 = set([88,44,11,33])
  >>> s1 == s2
  True
    从上面代码可以看出,集合s1和集合s2的元素相同,但是位置是不同的,但是判断是否相等的时候返回的是True,说明顺序不同元素相同的集合是同一个集合。

>>> dic = {"k1":"v1","k2":"v2","k1":"v1"}
  >>> s3 = set(dic)
  >>> s3
  {‘k1‘, ‘k2‘}
    从上面代码可以看出,当set()集合里面的元素是集合是,生成的是键的集合。

下面来看看集合常用的方法:

  1.add(self,*args,**kwargs)

def add(self, *args, **kwargs): # real signature unknown
    """
    Add an element to a set.

    This has no effect if the element is already present.
    """
    pass

从上面源码中我们可以看出add(self,*args,**kwargs)是向集合中添加元素,Add an element to a set.作用是向集合中添加元素。

add(self,*args,**kwargs)是向集合中添加元素,我们学过了很多添加元素的方法。集合中添加元素的方法是add()。加入元素。

>>> s1 = {88, 33, 66, 11, 44}
  >>> s1.add(77)
  >>> s1
  {33, 66, 11, 44, 77, 88}
  >>> s1.add(66)
  >>> s1
  {33, 66, 11, 44, 77, 88}
    从上面代码可以看出,add()是向结合中添加不同的元素。

2.clear(self,*args,**kwargs)

def clear(self, *args, **kwargs): # real signature unknown
    """ Remove all elements from this set. """
    pass

clear()是清楚集合中的元素,把集合中的所有元素都清楚,这种情况进场用来遍历结合之后重新生成集合元素。

>>> s2 = {88, 33, 11, 44}
  >>> s2.clear()                     (1)清除集合中所有的元素。
  >>> s2
  set()
    从上面,代码可以看出,clear()是清楚集合中的元素。如果集合中没有元素,那么表示形式为:set()空的集合。但是前面标识了这是一个什么样的空集合。set()避免与空字典,空列表,空元素表示形式一样而进行的区分。

clear(self)是用来清楚集合中的元素。字典中添加和清楚的方法,add(),clear().源代码写的是Remove all elements from this set.

3.copy(self,*args,**kwargs)

def copy(self, *args, **kwargs): # real signature unknown
    """ Return a shallow copy of a set. """
    pass
    copy(self,*args,**kwargs)复制集合中的元素,产生新的一个内存地址,否则清除集合的时候,关联的其他变量也会被清除掉

set()
  >>> s2.add(11)
  >>> s2.add(22)
  >>> s2.add(66)
  >>> s2.add(44)
  >>> s2
  {66, 11, 44, 22}

>>> s3 = s2
  >>> s3
  {66, 11, 44, 22}
  >>> s3.clear()
  >>> s2
  set()

我们知道,等号(=)只是进行关联,把一个变量关联到同一个元素的内存地址,两个变量公用一个地址。因此我们删除一个集合的元素的时候,另外一个集合也会收到影响,而使用copy()就不会发生这样的事情。

4.difference(self,*args,**kwargs)

def difference(self, *args, **kwargs): # real signature unknown
    """
    Return the difference of two or more sets as a new set.

    (i.e. all elements that are in this set but not the others.)
    """
    pass

上面集合中,两个集合中间的部分为交集,两个集合减去各自部分的为不同的集合;如果是使用difference()那么,生成的集合是A - A∩B的集合。下面实例:

>>> s1 = {33, 66, 11, 44, 77, 88}
  >>> s2
  {99, 11, 44, 22}
  >>> s1.difference(s2) = {88, 33, 66, 77}
  >>> s2.difference(s1)
  {99, 22}

>>> s3 = {33, 99, 22, 55}
    >>> s1.difference(s2,s3)
  {88, 66, 77}
    从上面程序可以看出,集合s1.difference(s2)的集合表示方式为A - A∩B。我们可以使用difference比较多个集合不同,然后去差集的情况,不仅仅只是单纯的两个元素。A.difference(B,C,...N)等价于A - A∩B∩C∩...∩N。

5.difference_update(self,*args,**kwargs)

def difference_update(self, *args, **kwargs): # real signature unknown
    """ Remove all elements of another set from this set. """
    pass

difference_update(self,*args,**kwargs)s1.difference_update(s3)从集合s1中删除与s3集合中相同的元素。改变了集合s1,而difference()是生成一个新的集合,两者的结果是一样的,difference_update()是更新了集合s1,而difference()是新生成了一个集合,不改变原来的集合。

difference_update(self,*args,**kwargs)与difference()方法是一样的,不同的是,difference_update()更新集合之后把新生成的集合赋给原来的集合,而difference(self,*args,**kwargs)是生成一个新的集合,并不修改原来的集合。看下面的实例:

>>> s2 = {99, 11, 44, 22}
  >>> s3 = {33, 99, 22, 55}
  >>> s4 = {33, 66, 88, 11, 44, 77}
  >>> s4.difference_update(s2,s3)
  >>> s4
  {66, 88, 77}
    可以看出,上面方法difference_update()产生的集合与difference()产生的集合结果是一样的,只是difference_update()把新产生的结果更新给了原来的集合。

时间: 2024-10-10 00:30:23

day3 集合set()实例分析的相关文章

Mahout机器学习平台之聚类算法详细剖析(含实例分析)

第一部分: 学习Mahout必须要知道的资料查找技能: 学会查官方帮助文档: 解压用于安装文件(mahout-distribution-0.6.tar.gz),找到如下位置,我将该文件解压到win7的G盘mahout文件夹下,路径如下所示: G:\mahout\mahout-distribution-0.6\docs 学会查源代码的注释文档: 方案一:用maven创建一个mahout的开发环境(我用的是win7,eclipse作为集成开发环境,之后在Maven Dependencies中找到相应

信用评级模型实例分析(以消费金融为例)-中

信用评级模型实例分析(以消费金融为例)-中 原创 2016-10-13 单良 亚联大数据 点击"亚联大数据"可关注我们! 第五章 自变量的初步分析与处理 模型变量有两种类型,分别是连续型变量 .连续型变数系指该变数为观察数据所得的实际数值,并没有经过群组处理 .间断型变数则系指质性变量或类别型变量 . 两种变数类型都适用于评分模型,但建议变量使用间断型态进行开发评分模型,主要原因如下: 1. 间断型变量有助于处理极端值或是样本数量较少的变量. 2. 非线性的因变量 (dependenc

sql注入实例分析

什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句.[1]比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表

Spark源码系列(八)Spark Streaming实例分析

这一章要讲Spark Streaming,讲之前首先回顾下它的用法,具体用法请参照<Spark Streaming编程指南>. Example代码分析 val ssc = new StreamingContext(sparkConf, Seconds(1)); // 获得一个DStream负责连接 监听端口:地址 val lines = ssc.socketTextStream(serverIP, serverPort); // 对每一行数据执行Split操作 val words = line

实现 | 朴素贝叶斯模型算法研究与实例分析

实现 | 朴素贝叶斯模型算法研究与实例分析(白宁超2018年9月4日09:03:21) 导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果.所以很受欢迎,对于朴素贝叶斯的学习,本文首先介绍理论知识即朴素贝叶斯相关概念和公式推导,为了加深理解,采用一个维基百科上面性别分类例子进行形式化描述.然后通过编程实现朴素贝叶斯分类算法,并在屏蔽社区言论.垃圾邮件.个人广告中获取区域倾向等几个方面进行应用,包括创建数据集.数据预处理.词集模型和词袋模型.朴素贝叶斯

《深入理解mybatis原理1》 MyBatis的架构设计以及实例分析

<深入理解mybatis原理> MyBatis的架构设计以及实例分析 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,深入代码,来探究MyBatis的实现. 一.MyBatis的框架设计   注:上图很大程度上参考了iteye 上的chenjc_it   所写的博文原理分析之二:框架整体设计 中的MyBatis架构体图,chenjc_it总结的

【OpenGL】Shader实例分析(七)- 雪花飘落效果

转发请保持地址:http://blog.csdn.net/stalendp/article/details/40624603 研究了一个雪花飘落效果.感觉挺不错的.分享给大家,效果例如以下: 代码例如以下: Shader "shadertoy/Flakes" { // https://www.shadertoy.com/view/4d2Xzc Properties{ iMouse ("Mouse Pos", Vector) = (100,100,0,0) iChan

Apache漏洞利用与安全加固实例分析

Apache 作为Web应用的载体,一旦出现安全问题,那么运行在其上的Web应用的安全也无法得到保障,所以,研究Apache的漏洞与安全性非常有意义.本文将结合实例来谈谈针对Apache的漏洞利用和安全加固措施. Apache HTTP Server(以下简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,是最流行的Web服务器软件之一.虽然近年来Nginx和Lighttpd等Web Server的市场份额增长得很快,但Apache仍然是这个领

java基础学习05(面向对象基础01--类实例分析)

面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过setter和getter设置和取得4.如果需要可以加入若干构造方法 5.再根据其它要求添加相应的方法6.类中的所有方法都不要直接输出,而是交给被调用处调用 Demo 定义并测试一个名为Student的类,包括属性有"学号"."姓名"以及3门课程"数学".