Python -- collection 系列

collection 数据容器

Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等,
collections

模块在这些内置数据类型的基础上,提供了几个额外的数据类型:

namedtuple()。创建有名字域的元组子类的工厂函数。python 2.6新增。

deque:双端队列,类似于列表,两端进栈和出栈都比较快速。python 2.4新增。

Counter:字典的子类,用于统计哈希对象。python 2.7新增。

OrderedDict:字典的子类,记录了添加顺序。python 2.7新增。

defaultdict:dict的子类,调用一个工厂函数支持不存在的值。python 2.5新增。

还提供了抽象基类,用来测试类是否提供了特殊接口,比如是哈希或者映射。

class {typename}(tuple):   # 可命名元祖    ‘{typename}({arg_list})‘

namedtuple主要用来产生可以使用名称来访问元素的数据对象,通常用来增强代码的可

读性, 在访问一些tuple类型的数据时尤其好用。

    def _make(cls, iterable, new=tuple.__new__, len=len):

from collections import namedtuple

            websites = [
                        (‘Sohu‘, ‘http://www.google.com/‘, ‘张朝阳‘),
                        (‘Sina‘, ‘http://www.sina.com.cn/‘, ‘王志东‘),
                        (‘163‘, ‘http://www.163.com/‘, ‘丁磊‘)
                        ]
            Website = namedtuple(‘Website‘, [‘name‘, ‘url‘, ‘founder‘])
            for website in websites:
                website = Website._make(website)
                print(website)

结果如下:

Website(name=‘Sohu‘, url=‘http://www.google.com/‘, founder=‘张朝阳‘)

Website(name=‘Sina‘, url=‘http://www.sina.com.cn/‘, founder=‘王志东‘)

Website(name=‘163‘, url=‘http://www.163.com/‘, founder=‘丁磊‘)

    def _replace(_self, **kwds):
    def _asdict(self):

class Counter(dict):  # 计数器

Counter() 的可用方法如下:

def most_common(self, n=None): # 获取出现频率最高的几个元素

def elements(self):   # 获取所有元素

例:

import collections

c1=collections.Counter (‘sdfsdgasdhgd‘)

print c1

print c1.most_common(3)

for i in c1.elements():

print i

C:\Python27\python.exe "E:/python-file/learn - python.py"

Counter({‘d‘: 4, ‘s‘: 3, ‘g‘: 2, ‘a‘: 1, ‘f‘: 1, ‘h‘: 1})

[(‘d‘, 4), (‘s‘, 3), (‘g‘, 2)]

a

d

d

d

d

g

g

f

h

s

s

s

Process finished with exit code 0

def update(*args, **kwds): # 有新添加的就添加到 collections.Counter()

>>> c1

Counter({‘d‘: 4, ‘s‘: 3, ‘g‘: 2, ‘h‘: 1, ‘f‘: 1, ‘a‘: 1})

>>> c2

Counter({‘a‘: 2, ‘d‘: 1, ‘c‘: 1, ‘b‘: 1})

>>> c1.update(c2)

>>> c1

Counter({‘d‘: 5, ‘s‘: 3, ‘a‘: 3, ‘g‘: 2, ‘h‘: 1, ‘c‘: 1, ‘b‘: 1, ‘f‘: 1})

def subtract(*args, **kwds):   # 相减 后 添加到  collections.Counter()

>>> c1

Counter({‘d‘: 5, ‘s‘: 3, ‘a‘: 3, ‘g‘: 2, ‘h‘: 1, ‘c‘: 1, ‘b‘: 1, ‘f‘: 1})

>>> c1.subtract(c2)

>>> c1

Counter({‘d‘: 4, ‘s‘: 3, ‘g‘: 2, ‘h‘: 1, ‘f‘: 1, ‘a‘: 1, ‘c‘: 0, ‘b‘: 0})

def copy(self):  # 浅层copy,只拷贝一层如有多层则一层之下默认指向深层地址

class OrderedDict(dict):  #  # 有序字典

区别无序字典及有序字典的实例:

import collections

c1=collections.OrderedDict ()

c1[‘k1‘]=1

c1[‘k3‘]=1

c1[‘k5‘]=1

c1[‘k2‘]=1

print c1

c1={}

c1[‘k1‘]=1

c1[‘k3‘]=1

c1[‘k5‘]=1

c1[‘k2‘]=1

print c1

结果如下:

OrderedDict([(‘k1‘, 1), (‘k3‘, 1), (‘k5‘, 1), (‘k2‘, 1)])     ---有序字典

{‘k3‘: 1, ‘k2‘: 1, ‘k1‘: 1, ‘k5‘: 1} ---无序字典

自定义有序字典,字典变成有序的字典

c1={}

c1[‘k1‘]=1

c1[‘k3‘]=3

c1[‘k5‘]=5

c1[‘k2‘]=2

print c1

li=[‘k1‘,‘k2‘,‘k3‘,‘k5‘]

for i in li:

print c1[i]

C:\Python27\python.exe "E:/python-file/learn - python.py"

{‘k3‘: 3, ‘k2‘: 2, ‘k1‘: 1, ‘k5‘: 5}

1

2

3

5

Process finished with exit code 0

有序字典方法,默认继承无序字典方法,如下:

def clear(self): #  默认清除所有元素

>>> c2

OrderedDict([(0, 2), (1, 2), (2, 2)])

>>> c2.clear()

>>> c2

OrderedDict()

def copy(self): #  浅copy

>>> c2 = c1.copy()

>>> c2

OrderedDict([(‘k4‘, 1), (‘k2‘, 1), (‘k3‘, 1), (‘k5‘, 1))

def fromkeys(cls, S, v=None): # (参见字典类)

>>> c2=c1.fromkeys((i for i in range(3)),2)

>>> c2

OrderedDict([(0, 2), (1, 2), (2, 2)])

def items(self, *args, **kwargs): #  有序字典同样具有字典的方法

>>> c1

OrderedDict([(‘k4‘, 1), (‘k2‘, 1), (‘k3‘, 1), (‘k5‘, 1)])

>>> c1.items()

odict_items([(‘k4‘, 1), (‘k2‘, 1), (‘k3‘, 1), (‘k5‘, 1)])

def keys(self, *args, **kwargs): # 有序字典中所有元素的key值

>>> c1

OrderedDict([(‘k4‘, 1), (‘k2‘, 1), (‘k3‘, 1), (‘k5‘, 1)])

>>> c1.keys()

odict_keys([‘k4‘, ‘k2‘, ‘k3‘, ‘k5‘])

def move_to_end(self, *args, **kwargs): # 将某一元素移到最后

>>> c1

OrderedDict([(‘k4‘, 1), (‘k5‘, 1), (‘k2‘, 1), (‘k3‘, 1)])

>>> c1.move_to_end(‘k5‘)

>>> c1

OrderedDict([(‘k4‘, 1), (‘k2‘, 1), (‘k3‘, 1), (‘k5‘, 1)])

def pop(self, k, d=None): #   删除某一元素,需要添加key值(见popitem)

def popitem(self): #  删除元素,默认从最后删除无序添加key值

>>> c1

OrderedDict([(‘k4‘, 1), (‘k5‘, 1), (‘k2‘, 1), (‘k3‘, 1), (‘k1‘, 1)])

>>> c1.popitem()

(‘k1‘, 1)

>>> c1.pop()

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: Required argument ‘key‘ (pos 1) not found

def setdefault(self, k, d=None): # 添加元素设置默认值,默认第二个参数为None

>>> c1.setdefault(2,‘v2‘)

‘v2‘

>>> c1

OrderedDict([(‘k4‘, 1), (‘k2‘, 1), (‘k3‘, 1), (‘k5‘, 1), (2, ‘v2‘)])

def update(self, *args, **kwargs): # 更新有序字典

>>> c1

OrderedDict([(‘k4‘, 1), (‘k2‘, 1), (‘k3‘, 1), (‘k5‘, 1)])

>>> c2

OrderedDict([(0, 2), (1, 2), (2, 2)])

>>> c1.update(c2)

>>> c1

OrderedDict([(‘k4‘, 1), (‘k2‘, 1), (‘k3‘, 1), (‘k5‘, 1), (0, 2),

(1, 2), (2, 2)])

def values(self, *args, **kwargs): # 有序字典中所有元素的values值

>>> c1

OrderedDict([(‘k4‘, 1), (‘k2‘, 1), (‘k3‘, 1), (‘k5‘, 1)])

>>> c1.values()

odict_values([1, 1, 1, 1])

class deque(object):  # 双向队列

def append(self, *args, **kwargs): # 右侧添加

>>> d2

deque([ ‘>‘, ‘-‘, ‘-‘, ‘-‘, ‘<‘])

>>> d2.append(‘-‘)

deque([ ‘>‘, ‘-‘, ‘-‘, ‘-‘, ‘<‘,‘-‘])

def appendleft(self, *args, **kwargs): # 左侧添加

>>> d2

deque([ ‘>‘, ‘-‘, ‘-‘, ‘-‘, ‘<‘])

>>> d2.appendleft(‘-‘)

deque([ ‘-‘,‘>‘, ‘-‘, ‘-‘, ‘-‘, ‘<‘])

def clear(self, *args, **kwargs): # 清除所有元素

def copy(self, *args, **kwargs): #   浅层copy

>>> d2

deque([ ‘>‘, ‘-‘, ‘-‘, ‘-‘, ‘<‘])

>>> d3=d2.copy()

def count(self, value): #

>>> d2

deque([ ‘>‘, ‘-‘, ‘-‘, ‘-‘, ‘<‘])

>>> d2.count(‘-‘)

3

def extend(self, *args, **kwargs): # 右侧扩展

>>> d3

deque([‘1‘, ‘2‘, ‘3‘])

>>> d2

deque([ ‘>‘, ‘-‘, ‘-‘, ‘-‘, ‘<‘])

>>> d2.extendleft(d3)

>>> d2

deque([ ‘>‘, ‘-‘, ‘-‘, ‘-‘,‘<‘,‘1‘, ‘2‘, ‘3‘])

def extendleft(self, *args, **kwargs): # 左侧扩展

>>> d3

deque([‘1‘, ‘2‘, ‘3‘])

>>> d2

deque([ ‘>‘, ‘-‘, ‘-‘, ‘-‘, ‘<‘])

>>> d2.extendleft(d3)

>>> d2

deque([‘3‘,‘2‘, ‘1‘, ‘>‘, ‘-‘, ‘-‘, ‘-‘,‘<‘])

def index(self, value, start=None, stop=None): # 索引

>>> d2

deque([‘3‘, ‘,‘, ‘2‘, ‘,‘, ‘1‘, ‘--‘, ‘>‘, ‘-‘, ‘-‘, ‘-‘, ‘-‘,‘<‘])

>>> d2.index(‘2‘)

2

def insert(self, index, p_object): # 可在指定位置插入

>>> d3

deque([‘1‘, ‘2‘, ‘3‘])

>>> d3.insert(1,‘4‘)

>>> d3

deque([‘1‘, ‘4‘, ‘2‘, ‘3‘])

def pop(self, *args, **kwargs): #  右侧删除

>>> d3

deque([‘1‘, ‘4‘, ‘2‘, ‘3‘])

>>> d3.pop()

‘3‘

def popleft(self, *args, **kwargs): # 左侧删除

>>> d3.popleft()

‘1‘

>>> d3

deque([‘4‘, ‘2‘])

def remove(self, value): #  删除某一元素,需要加参数

>>> d3.remove(‘4‘)

>>> d3

deque([‘2‘])

def reverse(self): #  反转

>>> d3

deque([‘1‘, ‘2‘, ‘3‘])

>>> d3.reverse()

>>> d3

deque([‘3‘, ‘2‘, ‘1‘])

def rotate(self, *args, **kwargs): #  下面这个是一个有趣的例子,主要使用了

deque的rotate方法来实现了一个无限循环的加载动画

import sys

import  time

from collections import deque

de = deque(‘>------------<‘)

while True:

print(‘\r %s ‘ % (‘‘.join(de)))

de.rotate(1)

sys.stdout.flush()

time.sleep(1)

结果如下:

>------------<

<>------------

-<>-----------

--<>----------

---<>---------

时间: 2024-10-17 13:16:04

Python -- collection 系列的相关文章

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

转载至:http://www.cnblogs.com/liu-yao/p/5146505.html 一.集合 1.集合(set): 把不同的元素组成一起形成集合,是python基本的数据类型.集合元素(set elements):组成集合的成员 python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)

3.python基础补充(集合,collection系列,深浅拷贝)

一.集合 1.集合(set): 把不同的元素组成一起形成集合,是python基本的数据类型.集合元素(set elements):组成集合的成员 python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算. sets 支持 x in set, len(set),和 for x in set.作

Python 从零学起(纯基础) 笔记 之 collection系列

Collection系列  1.  计数器(Counter) Counter是对字典类型的补充,用于追踪值的出现次数   ps  具备字典所有功能 + 自己的功能 Counter 1 import collections 2 obj = collections.Counter('haskhflajgahg') 3 print(obj) 4 ret = obj.most_common(4)#取前四位(很少用到) 5 print(ret) 结果: Counter({'a': 3, 'h': 3, '

python collection

一.collection系列: 1.counter计数器 如果counter(dict)是对字典的一个补充,如果counter(list)则是对列表的补充,初步测试对字典的值进行排序. ########################################################################### Counter######################################################################## c

Python学习系列(八)( 面向对象基础)

 Python学习系列(八)( 面向对象基础) Python学习系列(七)( 数据库编程) 一,面向对象 1,域:属于一个对象或类的变量.有两种类型,即实例变量—属于每个实例/类的对象:类变量—属于类本身. 2,类的方法:对象也可以使用属于类的函数来具有功能,这样的函数称之为类的方法.域和方法合称为类的属性.类使用class关键字创建,类的属性被列在一个缩进块中. 3,self:类的方法与普通的函数只有一个特别的区别----他们必须有一个额外的第一个参数名称,但是在调用的时候不能为其赋值,Pyt

Python学习系列(六)(模块)

一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: i)引入模块:import   moduleName ii)引入模块下的函数:from moduleName import function1,function2,-- iii)引入模块下的所有函数:from moduleName import * 使用模块里的函数的方法: moduleName.function(agrs) 示例: >>> import math >

人脸检测及识别python实现系列(4)——卷积神经网络(CNN)入门

人脸检测及识别python实现系列(4)--卷积神经网络(CNN)入门 上篇博文我们准备好了2000张训练数据,接下来的几节我们将详细讲述如何利用这些数据训练我们的识别模型.前面说过,原博文给出的训练程序使用的是keras库,对我的机器来说就是tensorflow版的keras.训练程序建立了一个包含4个卷积层的神经网络(CNN),程序利用这个网络训练我的人脸识别模型,并将最终训练结果保存到硬盘上.在我们实际动手操练之前我们必须先弄明白一个问题--什么是卷积神经网络(CNN)? CNN(Conv

人脸检测及识别python实现系列(2)——识别出人脸

人脸检测及识别python实现系列(2)--识别出人脸 从实时视频流中识别出人脸区域,从原理上看,其依然属于机器学习的领域之一,本质上与谷歌利用深度学习识别出猫没有什么区别.程序通过大量的人脸图片数据进行训练,利用数学算法建立建立可靠的人脸特征模型,如此即可识别出人脸.幸运的是,这些工作OpenCV已经帮我们做了,我们只需调用对应的API函数即可,先给出代码: #-*- coding: utf-8 -*- import cv2 import sys from PIL import Image d

(原创)Python字符串系列(1)——str对象

在本博客 <Python字符串系列> 中,将介绍以下内容: Python内置的str对象及操作 字符串的格式化 Python中的Unicode字符串 Python中的正则表达式 re模块 本文将介绍Python内置的 str 类型,列举Python中字符串对象支持的方法,使用这些方法可以实现强大的字符串处理功能. 在Python 2 中,普通字符串与Unicode字符串有着明确的区分,二者都是Python内置的基本类型,例如: >>> type(str) <type '