Python中的collections集合与typing数据类型模块

目录
  • 一、collections集合
    • 1、namedtuple:命名tuple对象
    • 2、deque:双端队列
    • 3、defaultdict:默认字典
    • 4、OrderedDict:顺序字典
    • 5、Counter:计数器
  • 二、typing模块
    • 1、typing模块的作用
    • 2、使用typing模块
    • 4、typing常用类型

一、collections集合

collections是Python内建的一个集合模块,提供了许多有用的集合类。

1、namedtuple:命名tuple对象

namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。

namedtuple('名称', [属性list])

这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。

我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成:

p = (1,2)

但是,看到(1, 2),很难看出这个tuple是用来表示一个坐标的。

定义一个class又小题大做了,这时,namedtuple就派上了用场:

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
p.x # 1
p.y #2

可以验证创建的Point对象是tuple的一种子类:

isinstance(p, Point) #True
isinstance(p, tuple) #True

类似的,如果要用坐标和半径表示一个圆,也可以用namedtuple定义:

Circle = namedtuple('Circle', ['x', 'y', 'r'])

2、deque:双端队列

使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。

from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x')
q.appendleft('y')
q
#deque(['y', 'a', 'b', 'c', 'x'])

3、defaultdict:默认字典

使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict。

注意默认值是调用函数返回的,而函数在创建defaultdict对象时传入。

除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。

from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
dd['key1'] # key1存在
#'abc'
dd['key2'] # key2不存在,返回默认值
#'N/A'

4、OrderedDict:顺序字典

使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。

如果要保持Key的顺序,可以用OrderedDict:

from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
d # dict的Key是无序的
#{'a': 1, 'b': 2, 'c': 3}
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
od # OrderedDict的Key是有序的
#OrderedDict([('a', 1), ('b', 2), ('c', 3)])

注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:

od = OrderedDict()
od['z'] = 1
od['y'] = 2
od['x'] = 3
od.keys() # 按照插入的Key的顺序返回
#odict_keys(['z', 'y', 'x'])

OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key:

from collections import OrderedDict

class LastUpdatedOrderedDict(OrderedDict):

    def __init__(self, capacity):
        super(LastUpdatedOrderedDict, self).__init__()
        self._capacity = capacity

    def __setitem__(self, key, value):
        containsKey = 1 if key in self else 0
        if len(self) - containsKey >= self._capacity:
            last = self.popitem(last=False)
            print('remove:', last)
        if containsKey:
            del self[key]
            print('set:', (key, value))
        else:
            print('add:', (key, value))
        OrderedDict.__setitem__(self, key, value)

5、Counter:计数器

Counter是一个简单的计数器.

Counter实际上也是dict的一个子类,下面的结果可以看出,字符'g'、'm'、'r'各出现了两次,其他字符各出现了一次。

例如,统计字符出现的个数:

from collections import Counter
c = Counter()
for ch in 'programming':
    c[ch] = c[ch] + 1
print(c)
#Counter({'p': 1, 'r': 2, 'o': 1, 'g': 2, 'a': 1, 'm': 2, 'i': 1, 'n': 1})

二、typing模块

1、typing模块的作用

  • 类型检查,防止运行时出现参数和返回值类型不符合。
  • 作为开发文档附加说明,方便使用者调用时传入和返回参数类型。
  • 该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒。
  • 注意:typing模块只有在python3.5以上的版本中才可以使用,pycharm目前支持typing检查。

2、使用typing模块

  • 在传入参数时通过"参数名:类型"的形式声明参数的类型;
  • 返回结果通过"-> 结果类型"的形式声明结果的类型。

在调用的时候如果参数的类型不正确pycharm会有提醒,但不会影响程序的运行。

from typing import List, Tuple, Dict

def add(a: int, c: str, d: float,  b: bool) -> Tuple[List, Tuple, Dict, bool]:
    list1 = list(range(a))
    tup = (c, c, c)
    d = {"a": d}
    bl = b
    return list1, tup, d, bl

print(add(5, "hhhh", 2.3, False))
# ([0, 1, 2, 3, 4], ('hhhh', 'hhhh', 'hhhh'), {'a': 2.3}, False)

对于如list列表等,还可以规定得更加具体一些。如:"-> List[str]”,规定返回的是列表,并且元素是字符串。

from typing import List

def func(a: int, b: str)   –>  List[int or str] :  # 使用or关键字表示多种类型
    list1 = []
    list1.append(a)
    list1.append(b)
    return list1

4、typing常用类型

  • int、long、float: 整型、长整形、浮点型
  • bool、str: 布尔型、字符串类型
  • List、 Tuple、 Dict、 Set:列表、元组、字典、集合
  • Iterable、Iterator:可迭代类型、迭代器类型
  • Generator:生成器类型

到此这篇关于Python集合collections、数据类型typing模块的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 一篇文章带你了解python中的typing模块和类型注解

    目录 typing模块 Dict List Tuple set/AbstractSet Sequence NoReturn Any TypeVar NewType Callable Union Optional Generator 总结 function annotation 写法: 使用冒号 : 加类型代表参数类型 默认值参数示例:b: int = 2 使用 -> 加类型代表返回值类型 python解释器运行时并不会检查类型,类型不对也不会抛异常,仅仅是注解而已.示例: def plus(a:

  • python collections模块的使用

    collections模块 collections模块:提供一些python八大类型以外的数据类型 python默认八大数据类型: - 整型 - 浮点型 - 字符串 - 字典 - 列表 - 元组 - 集合 - 布尔类型 1.具名元组 具名元组只是一个名字 应用场景: ① 坐标 # 应用:坐标 from collections import namedtuple # 将"坐标"变成"对象"的名字 # 传入可迭代对象必须是有序的 point = namedtuple(&

  • Python中typing模块的具体使用

    目录 typing库 一. 简介 二. 别名 1. 类型别名 2. NewType 3. 可调用对象 三. 泛型支持 1.集合类型 2. 抽象基类 3. 泛型 4. Any 5. 特殊形式 5.1 Type 5.2 Union 5.3 Optional 5.4 Tuple 5.5 Callable typing库 一. 简介 Python是一门弱类型的语言,很多时候我们可能不清楚函数参数类型或者返回值类型,很有可能导致一些类型没有指定方法,在写完代码一段时间后回过头看代码,很可能忘记了自己写的函

  • python使用typing模块加强代码的可读性(实战演示)

    一.需求描述 没有类型提示的编程,总觉得不太方便,好在python3.5以后内置了typing模块. typing模块会对函数和变量类型进行注解. 但是Python 运行时不强制执行函数和变量类型注解,但这些注解可用于类型检查器.IDE.静态检查器等第三方工具. 官方网址: typing --- 类型提示支持 - Python 3.10.1 文档 https://docs.python.org/zh-cn/3/library/typing.html 二.实战演练 1.体验注解功能 如下所示,定义

  • Python的collections模块真的很好用

    collections是实现了特定目标的容器,以提供Python标准内建容器 dict , list , set , 和 tuple 的替代选择.为了让大家更好的认识,本文详细总结collections的相关知识,一起来学习吧! collections模块:实现了特定目标的容器,以提供Python标准内建容器 dict.list.set.tuple 的替代选择. Counter:字典的子类,提供了可哈希对象的计数功能. defaultdict:字典的子类,提供了一个工厂函数,为字典查询提供了默认

  • python typing模块--类型提示支持

    目录 1.typing介绍 2.typing的作用 3.常用类型 3.1 代码示例 4.typing模块的其他用法 4.1 类型别名 4.2 NewType 4.3 Callable 4.4 TypeVar泛型 4.5 Any 4.6 Union 1.typing介绍 Python是一门弱类型的语言,很多时候我们可能不清楚函数参数的类型或者返回值的类型,这样会导致我们在写完代码一段时间后回过头再看代码,忘记了自己写的函数需要传什么类型的参数,返回什么类型的结果,这样就不得不去阅读代码的具体内容,

  • 了解一下python内建模块collections

    在使用Python的过程中,一定是离不开数据结构的, 也就是List-列表,Tuples-元组,Dictionaries-字典. 那实际应用中我们更多的还是要去操作这些结构里的数据.比如,在列表后面添加元素,那么就会用到append() 方法. 那除了这些本身的操作方法之外,还有一个Python内建模块--collections,也提供了不少使用的方法,今天来捋一下. 一.Counter 这是一个计数器,我们可以用来方便的统计出一些元素出现的次数,比如String.List.Tuples等等.

  • Python中typing模块与类型注解的使用方法

    实例引入 我们知道 Python 是一种动态语言,在声明一个变量时我们不需要显式地声明它的类型,例如下面的例子: a = 2 print('1 + a =', 1 + a) 运行结果: 1 + a = 3 这里我们首先声明了一个变量 a,并将其赋值为了 2,然后将最后的结果打印出来,程序输出来了正确的结果.但在这个过程中,我们没有声明它到底是什么类型. 但如果这时候我们将 a 变成一个字符串类型,结果会是怎样的呢?改写如下: a = '2' print('1 + a =', 1 + a) 运行结

  • Python collections模块的使用方法

    collections模块 这个模块实现了特定目标的容器,以提供Python标准内建容器 dict.list.set.tuple 的替代选择. Counter:字典的子类,提供了可哈希对象的计数功能 defaultdict:字典的子类,提供了一个工厂函数,为字典查询提供了默认值 OrderedDict:字典的子类,保留了他们被添加的顺序 namedtuple:创建命名元组子类的工厂函数 deque:类似列表容器,实现了在两端快速添加(append)和弹出(pop) ChainMap:类似字典的容

  • Python中的collections集合与typing数据类型模块

    目录 一.collections集合 1.namedtuple:命名tuple对象 2.deque:双端队列 3.defaultdict:默认字典 4.OrderedDict:顺序字典 5.Counter:计数器 二.typing模块 1.typing模块的作用 2.使用typing模块 4.typing常用类型 一.collections集合 collections是Python内建的一个集合模块,提供了许多有用的集合类. 1.namedtuple:命名tuple对象 namedtuple是一

  • python中必会的四大高级数据类型(字符,元组,列表,字典)

    一. 字符串 生活中我们经常坐大巴车,每个座位一个编号,一个位置对应一个下标. 字符串中也有下标,要取出字符串中的部分数据,可以用下标取. python中使用切片来截取字符串其中的一段内容,切片截取的内容不包含结束下标对应的数据. 切片使用语法:[起始下标:结束下标:步长] ,步长指的是隔几个下标获取一个字符. 注意:下标会越界,切片不会 常用函数 练习: Test='rodma ' print(type(Test)) print('Test的一个字符串%s'%Test[0])#跟数组差不多 #

  • 详细介绍Python中的set集合

    目录 Python中的set集合 一.集合是什么? 二.set集合怎么用? 1.创建set集合 2.删除set集合 3.访问set集合元素 4.删除集合中的元素 5.向集合中添加元素 三.set集合的交并补 1.交集 2.并集 3.差集 四.set中的其他方法 五.frozenset 集合 Python中的set集合 一.集合是什么? 集合是什么呢?相信读者朋友们哪怕是没有用过集合这个数据类型.也一定在数学课堂上听过集合这个名词.数学中的集合是一个基本概念,说白了一堆不重复的数字可以组成一个集合

  • Python中字典和集合学习小结

    映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表.字典和元组不能用作键 引用不存在的键会引发KeyError异常 1)字典 dict { } 空字典 { key1:value1,key2:value2,... } 字典在其它编程语言中又称作关联数组或散列表: 通过键实现元素存取:无序集合:可变类型容器,长度可变,异构,嵌套 支持的操作: len(D

  • Java中关于Collections集合工具类的详细介绍

    Collections 是一个操作 Set.List 和 Map 等集合的工具类. Collections 中提供了一系列静态的方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控制等方法. 排序操作 reverse(List):反转 List 中元素的顺序 shuffle(List):对 List 集合元素进行随机排序 sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序 sort(List,Comparator):根据指定的 C

  • Python中关于元组 集合 字符串 函数 异常处理的全面详解

    目录 元组 集合 字符串 1.字符串的驻留机制 2.常用操作 函数 1.函数的优点: 2.函数的创建:def 函数名([输入参数]) 3.函数的参数传递: 4.函数的返回值: 5.函数的参数定义: 6.变量的作用区域 7.递归函数:函数体内套用该函数本身 8.将函数存储在模块中 9.函数编写指南: Bug 1.Bug常见类型 2.常见异常类型 3.python异常处理机制 pycharm开发环境的调试 编程思想 (1)两种编程思想 (2)类和对象的创建 元组 元组是不可变序列 多任务环境下,同时

  • python中内置库os与sys模块的详细介绍

    目录 os包 sys模块 os包 想要使用os包一样要先导入:import os os包下可以直接调用的函数 下面介绍一下os包中可以直接调用的函数: 例子: 例子: 例子: 注意:os.path.exists()参数可以传绝对路径,也可以传相对路径: 已知一个文件的路径,可以用spilt切割出这个文件名: sys模块 sys模块常用于操作当前的操作系统/环境 sys中常用的函数: 例子: 关于argv我们知道,他可以从程序外部获取参数,我们让他从终端传入参数给程序. 举一个详细的例子介绍: 可

  • 简单谈谈Python中的几种常见的数据类型

    计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型.在Python中,能够直接处理的数据类型有以下几种: 一.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0

  • python 中的collections.OrderedDict() 用法

    Python中的字典对象可以以"键:值"的方式存取数据.OrderedDict是它的一个子类,实现了对字典对象中元素的排序. 注意,OrderedDict的 Key 会按照插入的顺序排列,不是Key本身排序: 比如下面比较了两种方式的不同: import collections print 'Regular dictionary:' d={} d['a']='A' d['b']='B' d['c']='C' for k,v in d.items(): print k,v print '

  • 简单介绍Python中的几种数据类型

    大体上把Python中的数据类型分为如下几类: Number(数字) 包括int,long,float,complex String(字符串) 例如:hello,"hello",hello List(列表) 例如:[1,2,3],[1,2,3,[1,2,3],4] Dictionary(字典) 例如:{1:"nihao",2:"hello"} Tuple(元组) 例如:(1,2,3,abc) Bool(布尔) 包括True.False 由于Pyt

随机推荐