返回顶部
首页 > 资讯 > 后端开发 > Python >Python中的collections集合与typing数据类型模块
  • 597
分享到

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

2024-04-02 19:04:59 597人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、collections集合1、namedtuple:命名tuple对象2、deque:双端队列3、defaultdict:默认字典4、OrderedDict:顺序字典5、Co

一、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模块的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Python中的collections集合与typing数据类型模块

本文链接: https://lsjlt.com/news/118415.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python中的collections集合与typing数据类型模块
    目录一、collections集合1、namedtuple:命名tuple对象2、deque:双端队列3、defaultdict:默认字典4、OrderedDict:顺序字典5、Co...
    99+
    2024-04-02
  • 简介Python的collections模块中defaultdict类型的用法
    defaultdict 主要用来需要对 value 做初始化的情形。对于字典来说,key 必须是 hashable,immutable,unique 的数据,而 value 可以是任意的数据类型。如果 va...
    99+
    2022-06-04
    模块 类型 简介
  • 【Python】数据类型之集合与函数
    知识目录 一、集合简介1.1 集合的定义1.2 实例 二、集合的基本操作三、函数3.1 函数的定义3.2 函数的调用3.3 全局变量和局部变量 一、集合简介 1.1 集合的...
    99+
    2023-09-01
    python 开发语言
  • Python 数据类型--集合set
    目录一、定义二、操作三、运算一、定义 集合中的元素是无序的、唯一的、不可变的类型。集合是一个特殊的列表,可以对数据去重。 lists = [1,3,5,7,3,4,6,2,7,9] ...
    99+
    2024-04-02
  • python基本数据类型(四)-集合与运
    1.集合 2.字典 3.运算符优先级 1.集合 创建:() set() 注意:创建空的集合要用set() 特点:元素唯一,无序 运算: &(交集) |(并集) -(差集) 方法: s.add(x) #添加单个元...
    99+
    2023-01-31
    数据类型 python
  • 一篇文章带你了解python中的typing模块和类型注解
    目录typing模块DictListTupleset/AbstractSetSequenceNoReturnAnyTypeVarNewTypeCallableUnionOp...
    99+
    2024-04-02
  • Python内置数据类型中的集合详解
    目录1. 集合 set 简介1.1 使用 { } 直接创建集合1.2 使用 set() 函数创建集合2. 集合没有切片功能!3. 处理集合的常见内置函数3.1  len 函...
    99+
    2024-04-02
  • Apache Cassandra 中的集合数据类型
    Apache Cassandra 中的集合数据类型包括:1. 列表(List):有序的元素集合,可以包含重复的元素。2. 集合(Se...
    99+
    2023-10-12
    Apache
  • Python中Collections模块的Counter容器类使用教程
    1.collections模块 collections模块自Python 2.4版本开始被引入,包含了dict、set、list、tuple以外的一些特殊的容器类型,分别是: OrderedDict类:排序...
    99+
    2022-06-04
    容器 模块 教程
  • Python集合与字典数据类型实例分析
    这篇文章主要讲解了“Python集合与字典数据类型实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python集合与字典数据类型实例分析”吧!前言集合数据类型是没有顺序的简单对象的聚集...
    99+
    2023-06-29
  • Python-集合数据类型内置方法
    用途:用于关系运算的集合体,由于集合内的元素无序且集合元素不可重复,因此集合可以去重,但是去重后的集合会打乱原来元素的顺序。 定义方式:{}内用逗号隔开多个元素,元素只能是不可变类型(整形、浮点型字符串),且有两个特点: 1、会删除重复...
    99+
    2023-01-31
    数据类型 方法 Python
  • Python内置数据类型中的集合实例分析
    本文小编为大家详细介绍“Python内置数据类型中的集合实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python内置数据类型中的集合实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 集合 s...
    99+
    2023-06-29
  • Python 一篇文章看懂Python集合与字典数据类型
    目录前言一、集合类型1.定义2.集合使用方式3.集合推导式4.可变集合二、字典类型1.定义2.字典的使用方式3.字典推导式4.代码练习总结前言 集合数据类型是没有顺序的简单对象的聚集...
    99+
    2024-04-02
  • Python基本数据类型的集合是什么
    这期内容当中小编将会给大家带来有关Python基本数据类型的集合是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。集合作为Python基本数据类型之一,相较于整型和字符串等类型来说难度要高很多,我们需要...
    99+
    2023-06-02
  • Python时间数据类型的模块有哪些
    这篇文章主要介绍“Python时间数据类型的模块有哪些”,在日常操作中,相信很多人在Python时间数据类型的模块有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python时间数据类型的模块有哪些”的疑...
    99+
    2023-06-02
  • 学习python的第十一天(集合数据类型
    1.集合数据类型 1.定义 用{}中间值用,隔开,且集合中元素排列是无序的,而且如果有相同元素会只保留一个 2.算法 1.必须掌握 1.长度len set_1 = {1,2,3,4,5} print(len(set_1)) #5 2.成...
    99+
    2023-01-31
    数据类型 第十一天 python
  • Python数据类型在常见集合中的语法有哪些
    这篇文章将为大家详细讲解有关Python数据类型在常见集合中的语法有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python数据类型中的set和C#中的集合(collection)不是...
    99+
    2023-06-17
  • Python中基础数据类型 set集合知识点总结
    集合的简介 集合是一个无序、不重复的序列 它的基本用法包括成员检测和消除重复元素 集合对象也支持像 联合,交集,差集,对称差分等数学运算 集合中所有的元素放在 {} 中间,并用逗号...
    99+
    2022-06-02
    Python 数据类型 set
  • Python基本数据类型--列表、元组、字典、集合
    一、Python基本数据类型--列表(List)  1、定义:[ ]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素。  2、列表的创建:   # 方式一list1 = ['name...
    99+
    2023-06-02
  • Silvelight中如何显示多重数据模型集合
    小编今天带大家了解Silvelight中如何显示多重数据模型集合,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“Silvelight中...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作