python issuperset集合_python学习笔记4:基础(集合,collection系列,深浅拷贝)

把不同的元素组成一起形成集合,是python基本的数据类型。集合元素(set elements):组成集合的成员

python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.

sets 支持 x in set, len(set),和 for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。

2.集合的创建

集合的使用

具体用法:

1.add(添加元素)

2.clear(清空集合)

3.copy(浅拷贝)

4.difference差异比较

5.difference_update差异更新

6.discard移除指定元素

7.intersection取交集并且建立新的集合

8.intersection_update取交集并且更新原来的集合

9.isdisjoint判断没有交集,没有返回true,有返回false

10.issubset判断是否为子集

11.issuperset判断是否为父集

12.pop移除集合元素

13.remove删除指定元素集合

14.symmetric_difference取两个集合的差集,并建立新的元素

15.symmetric_difference_update取两个集合的差集,更新原来的集合对象

16.union并集

17.update更新集合

案例:

二.collection系列

collections模块自Python 2.4版本开始被引入,包含了dict、set、list、tuple以外的一些特殊的容器类型,分别是:

OrderedDict类:排序字典,是字典的子类。引入自2.7。

namedtuple()函数:命名元组,是一个工厂函数。引入自2.6。

Counter类:为hashable对象计数,是字典的子类。引入自2.7。

deque:双向队列。引入自2.4。

defaultdict:使用工厂函数创建字典,使不用考虑缺失的字典键。引入自2.5。

使用的时候需要用import导入collections模块

1.计数器(counter)

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

(1)创建

创建一个空的Counter类

结果:

(2).计数值的访问

当所访问的键不存在时,返回0,而不是KeyError;否则返回它的计数。

(3).计数器的更新与减少

1.update()更新

2.subtract()减少

(4)键的删除

当计数值为0时,并不意味着元素被删除,删除元素应当使用del

(5) 迭代器

返回一个迭代器。元素被重复了多少次,在该迭代器中就包含多少个该元素。所有元素按照字母序排序,个数小于1的元素不被包含。

(5)most_common([n])

返回一个TopN列表。如果n没有被指定,则返回所有元素。当多个元素计数值相同时,按照字母序排列。

(6)浅拷贝

(7)算术与集合操作

+、-、&、|操作也可以用于Counter。其中&和|操作分别返回两个Counter对象各元素的最小值和最大值。需要注意的是,得到的Counter对象将删除小于1的元素。

一些Counter类的常用操作,来源于Python官方文档

2.有序字典(orderedDict )

有序字典继承字典的一切属性,只是在顺序上是有序的。

一些功能:

(1).move_to_end将指定的键值对从开头移动到末尾。

(2).pop删除字典键值,返回删除的键值的values

(3).clear清除有序字典的值

3.默认字典(defaultdict)

这里的defaultdict(function_factory)构建的是一个类似dictionary的对象,其中keys的值,自行确定赋值,但是values的类型,是function_factory的类实例,而且具有默认值。比如default(int)则创建一个类似dictionary对象,里面任何的values都是int的实例,而且就算是一个不存在的key, d[key] 也有一个默认值,这个默认值是int()的默认值0.

defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。创建一个默认字典,value值类型为列表.dic = collections.defaultdict(list)

例:

defaultdict可以接受一个内建函数list作为参数。其实呢,list()本身是内建函数,但是再经过更新后,python里面所有东西都是对象,所以list改编成了类,引入list的时候产生一个类的实例。

一些具有的方法:

1.copy拷贝

4.可命名元组(namedtuple)

没有现成的类,用户需要自行创建相应的类

5.双向队列(deque)

(1)创建一个队列

(2)追加元素到队列

(3)追加元素到队列左侧

(4)统计元素个数

(4)清除

(5)extend扩展元素

(6)extendleft从左侧扩展

(7)pop删除

(8)popleft从左侧开始删除

(9)reverse顺序反转

(10)remove删除指定元素

(11)rotate将队列末尾4个元素反转到队列左侧

6.单向队列 queue(先进先出 FIFO )

(1)创建

queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。

(3)放入任务

调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为

1。如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。

(3)从队列中取值

调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为True。如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False,队列将引发Empty异常。

(3)返回队列大小

(4)判断队列为空返回True,反之False

(5)q.full() 如果队列满了,返回True,反之False

q.full 与 maxsize 大小对应

其他方法:

三.深浅拷贝

1.为什么要拷贝?

当进行修改时,想要保留原来的数据和修改后的数据

2.数字字符串 和 集合 在修改时的差异? (深浅拷贝不同的终极原因)

3.对于集合,如何保留其修改前和修改后的数据?

在内存中拷贝

4.对于集合,如何拷贝其n层元素同时拷贝?

深拷贝

1.对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。

例:

2.对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。

赋值,只是创建一个变量,该变量指向原来内存地址,如:

(3)浅拷贝,在内存中只额外创建第一层数据

(4)深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)

案例:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值