python成长之路第二篇(4)_collections系列

一、分别取出大于66的数字和小于66的数字

小练习:需求要求有一个列表列表中存着一组数字,要求将大于66的数字和小于66的数字分别取出来

aa = [11,22,33,44,55,66,77,88,99,90]

dic = {}

for i in aa :

    ifi <= 66 :

        if ‘k1‘ in dic.keys():

            dic[‘k1‘].append(i)

        else:

            #创建只有一项元素的列表

           dic[‘k1‘] = [i,]   #为了规范请使用逗号

    else:

        if ‘k2‘ in dic.keys():

            dic[‘k2‘].append(i)

        else:

            dic[‘k2‘] = [i,]

print(dic[‘k1‘])

print(dic[‘k2‘])

#k1和k2就分别保存了大于66和小于66的结果

 

二、collections系列

(1)Counter计数器

Counter是对字典类型的补充,用于追踪值的出现次数。

ps:具备字典的所有功能 + 自己的功能

例子:
import collectionsf1 = collections.Counter(‘asdwqewqdsadsadsa‘)print(f1)
结果:
Counter({‘a‘: 4, ‘d‘: 4, ‘s‘: 4, ‘q‘: 2, ‘w‘: 2, ‘e‘: 1})
#这个例子就是统计出元素出现的次数

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

orderdDict是对字典类型的补充,他记住了字典元素添加的顺序,从而使字典变得有序

例子:

import collectionsf1 = collections.OrderedDict()f1["a"] = 3f1["c"] = 2f1["b"] = 1f2 = {}f2["a"] = 3f2["c"] = 2f2["b"] = 1print(f1,f2)

结果:OrderedDict([(‘a‘, 3), (‘c‘, 2), (‘b‘, 1)]) {‘b‘: 1, ‘c‘: 2, ‘a‘: 3}

从上面就可以发现,想同值的字典使用OrderedDict就按照添加顺序进行排序

内部机制:

在正常的字典中f2这么排序的:

f2 = {‘b‘: 1, ‘c‘: 2, ‘a‘: 3}

而使用OrderedDict后他会生成一个列表来保存字典添加的顺序

f1 = {‘b‘: 1, ‘c‘: 2, ‘a‘: 3}

f1_list = ["a","c","b"]

这样就可以通过for循环来得到有序的字典

不要较真哈

(3)默认字典(defaultdict)

defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。

import collectionsf1 = collections.defaultdict(list)f1["a"].append(1)print(f1)
上面的和下面的效果相等,所以defaultidict是把value值设置成默认为list类型也就是列表类型f1 = {}f1["a"] = []f1["a"].append(1)
(4)可命名元组namedtuple

也就是将值提前起个名字,然后传值,主要用于平面图想x,y轴

import collections

atuple = collections.namedtuple("atuple",[‘x‘,‘y‘,‘z‘])new = atuple(1,2,3,)print(new)
atuple(x=1, y=2, z=3)
(5)双向队列collections.deque

双向队列为,例如有一个列表,这个列表呢 可以从左面和右面取数据,也可以从左面和右面同时加数据

方法:

(1)def append(self, *args, **kwargs): 添加右侧
      # real signature unknown           """ Add an element to the right side of the dequ‘. """            pass
(2)def appendleft(self, *args, **kwargs): 添加到队列的左侧
           # real signature unknown            """ Add an element to the left side of the deque. """             pass
(3)clear(self, *args, **kwargs): 清除
  real signature unknown   "" Remove all elements from the deque. """    ass

(4)f count(self, value): 元素出现的的个数
   real signature unknown; restored from __doc__     """ D.count(value) -> integer -- return number of occurrences of value """     return 0
(5)def extend(self, *args, **kwargs):扩展右添加
   # real signature unknown     """ Extend the right side of the deque with elements from the iterable """     pass
(6)def extendleft(self, *args, **kwargs): 扩展左添加
    # real signature unknown     """ Extend the left side of the deque with elements from the iterable """     pass
(7)def pop(self, *args, **kwargs): 从右侧取出元素
   # real signature unknown     """ Remove and return the rightmost element. """     pass
(8)def popleft(self, *args, **kwargs):从左侧取出元素
    real signature unknown     """ Remove and return the leftmost element. """     pass
(9)def remove(self, value): 删除指定元素
   # real signature unknown; restored from __doc__     """ D.remove(value) -- remove first occurrence of value. """     pass
(10)def reverse(self): 翻转
    # real signature unknown; restored from __doc__     """ D.reverse() -- reverse *IN PLACE* """     pass

三、单向队列Queue

    q =Queue.Queue(10) 创建单向队列,括号中为队列中可放入元素的个数
    q.put 添加元素
    q.get 取出元素
  • 队列的特点:谁先进入谁先出去
  • 栈的特点:弹夹结构,后加的先出
时间: 2024-11-07 01:48:30

python成长之路第二篇(4)_collections系列的相关文章

Python成长之路第二篇(1)_数据类型内置函数用法

数据类型内置函数用法int 关于内置方法是非常的多这里呢做了一下总结 (1)__abs__(...)返回x的绝对值 #返回x的绝对值!!!都是双下划线 x.__abs__() <==> abs(x) 例如: #!/usr/bin/python print "abs(-45) : ", abs(-45) print "abs(100.12) : ", abs(100.12) print "abs(119L) : ", abs(119L)

Python成长之路第二篇(2)_列表元组内置函数用法

列表元组内置函数用法list 元组的用法和列表相似就不一一介绍了 1)def append(self, p_object):将值添加到列表的最后 # real signature unknown; restored from __doc__ """ L.append(object) -- append object to end """ pass (2)def count(self, value): 值的出现次数 # real signature

Python成长之路第二篇(3)_字典的置函数用法

字典的置函数用法(字典dict字典中的key不可以重复) class dict(object): """ dict() -> new empty dictionary dict(mapping) -> new dictionary initialized from a mapping object's (key, value) pairs dict(iterable) -> new dictionary initialized as if via: d =

Python成长之路第一篇(4)_if,for,while条件语句

有了以上的基本基础,已经上面写的几个小练习,大家肯定有很多的不满,比如查询为什么查询一次就退出了呢?下面我们来学习条件语句 一.万恶的加号 以前我们在print的时候如果要加上变量都有是使用+来作为连接,但是这样做是不好的 因为在使用加号的时候,会在内存中开辟新的内存地址来存放新的内容这样做的坏处就是增加了内存的消耗 那么我们该怎么办呢? (1)字符串格式化 ①内置占位符 Python 支持格式化字符串的输出 .尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符

Python成长之路第一篇(2)-初识列表和元组

可以将列表和元组当成普通的"数组",他能保存任意数量任意类型的Python对象,和数组一样都是通过数字0索引访问元素,列表和元组可以存储不同类型的对象,列表和元组有几处重要区别.列表元素用([])包括,元素的个数和值可以改变,而元组用({})包括,不能更改.元组可以看成是只读的列表 一.初识列表 1.下面是一个正常的列表 >>> lis = ['xiaoyuan',25] 在序列中,可以包含其他的序列,也就是列表可以包含列表元组等 >>> lis =

Python成长之路 第一篇 《Python基础》

1.python文件命名 - 后缀名可以是任意的,但为规范便于识别,后缀名应为 .py 2.两种执行方式    python解释器   py文件路径     python   进入解释器: 实时输入并获取到执行结果 3.解释器路径 在Linux系统中应添加  #!/user/bin/env python    , windows系统中可不添加 4.编码 # -*- coding:utf8 -*-  (在python3中可不加,python只要出现中文头部必须加) ascill  只能编译英文 u

Python成长之路第一篇(1)__字符串初识

在很多编程的书中都会以print  "Hello,world!"这样的而一个程序为开始,那么hello,world是什么呢?这就是本章讲解的字符串(也即是一串字符) 一.单引号,双引号和转义引号 (1)在一般的时候 'Hello,world!'和"Hello,world!"是没有什么区别的,那么为什么会两个都可以用呢?是因为在某些情况下,他们会排上用处 1 >>> "Hellow,world" 2 'Hellow,world' 

python成长之路第一篇(5)文件的基本操作

一.三元运算 我们在上章学习的if,,else,,有一种简便的方法 他的表达式是这样的:变量 = 值1 if 条件 else 值2 解释过来就是如果aaa等于sss则输出值1否则输出值2 二.类的概念 类是面向对象编程的核心, 它扮演相关数据及逻辑的容器角色.它们提供了创建"真实"        对象(也就是实例)的蓝图.对于Python,一切事物都是对象,对象基于类创建. 如何查询对象的类呢? 为啥分为有下划线和没下划线的呢,这些又是什么呢?本例中以查看的是列表的类,那么这个类下面就

python成长之路——第二天

cpython:c解释器  .pyc(字节码)——机器码 jpython :java解释器   java字节码 ironpython :C#解释器   C#字节码 .... 上面的:编译完之后是字节码 pypy:自己的解释器  自己的字节码   机器码  编译完直接是机器码  直接运行机器码  快 类似java <python源码剖析> 编码: #-*- coding: utf-8 -*- 8位:2**8=256——Unicode(万国码)至少16位——utf-8:Unicode的压缩(不同类