首页 > 代码库 > day3 集合set()实例分析
day3 集合set()实例分析
集合,我们在高中的时候专门学习过集合,并集,交集,差集等,下面来看一下集合的定义,如下:
集合(简称集)是数学中一个基本概念,它是集合论的研究对象,集合论的基本理论直到19世纪才被创立。最简单的说法,即是在最原始的集合论
——朴素集合论中的定义,集合就是“确定的一堆东西”。集合里的“东西”,叫作元素。
由一个或多个确定的元素所构成的整体叫做集合。若x是集合A的元素,则记作x∈A。集合中的元素有三个特征: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()把新产生的结果更新给了原来的集合。
day3 集合set()实例分析