iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中有哪些内置数据结构
  • 141
分享到

python中有哪些内置数据结构

2023-06-14 22:06:17 141人浏览 安东尼

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

摘要

这篇文章给大家介绍python中有哪些内置数据结构,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python的数据类型有哪些?python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(

这篇文章给大家介绍python中有哪些内置数据结构,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Python的数据类型有哪些?

python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮点型)。2.字符串,分别是str类型和unicode类型。3.布尔型,Python布尔类型也是用于逻辑运算,有两个值:True(真)和False(假)。4.列表,列表是Python中使用最频繁的数据类型,集合中可以放任何数据类型。5. 元组,元组用”()”标识,内部元素用逗号隔开。6. 字典,字典是一种键值对的集合。7. 集合,集合是一个无序的、不重复的数据组合。

array

Python不仅仅可以使用内置的list实现数组,还支持像C语言那样的指定类型的原生数组array。
很显然,因为list可以存储各种类型的对象,而array只存储一个指定的原生类型,所以当数据量较大时,原生array在内存占用方面要比list小。
而且array不像C语言里那样在定义时就限制了大小,它支持list所支持的各种常用函数。相比之下Python的array更像是c++的vector。

from array import arrayl = list(range(100))a = array.fromlist(l)print(l.__sizeof__(), a.__sizeof__())

目前array有两个限制。首先,它只支持整数、小数、unicode字符,而不能像C++的vector那样支持多种数据类型。另外目前指定类型比较麻烦,我们需要使用类型对应的字母缩写来指定,而不能使用简单的诸如int,float的方式。

a = array('i')a.append(1)a.append(4)
Type code C TypePython TypeMinimum size in bytes
'b'signed charint1
'B' unsigned charint1
'u'wchar_t Unicode character2
'h' signed shortint2
'H' unsigned shortint2
'i'signed intint2
'I' unsigned intint2
'l'signed longint4
'L' unsigned longint4

更详细的信息可以参考:https://docs.python.org/3.8/library/array.html

defaultdict

C++的map对于新的key会自动使用value type的默认构造函数构造一个值,而Python默认的dict对于不存在的key的访问会抛出异常(赋值除外)。这是因为Python不知道value的类型,所以没办法为我们默认构造。
defaultdict要求我们在构造时指定一个类型,然后会自动根据需要初始化value。这样我们就可以使用简单的代码来实现很多功能。

下面的代码,我对比了使用defaultdict和original dict实现将学生按照姓的首字母分组的功能,以及分类计数的功能。

import collectionsstudents = ['Zhang San', 'Li Si', 'Zhou liu', 'Chen qi', 'Cheng ba']# using defaultdictdd = collections.defaultdict(list)for s in students:key = s[0]dd[key].append(s)print(dd)# using original dict (method 1)od = {}for s in students:key = s[0]if key not in do:od[key] = []od[key].append(s)print(od)scores = ['A', 'B', 'C', 'A', 'A', 'B', 'C', 'B', 'A', 'A']# using defaultdictdd = collections.defaultdict(int)for s in scores :dd[s] += 1print(dd)# using original dict (method 2)od = collections.defaultdict(int)for s in scores :if s not in do:do[s] = 1else:do[s] += 1print(od)

Named Tuple

编程实践中我们经常需要创建一些小的数据结构用来整合一组相关联的数据,简单的比如地理坐标的经纬度,颜色的RGB值或者矩形框的左上和右下坐标,复杂的比如构造一个窗口的一组参数。
实践中,我们通常有3中实现方法:

  • 对每一个这样的数据结构创建一个class。优点是可以直接使用名字访问数据成员,而且支持复杂的访问逻辑和数据操作。缺点是需要编写对应的类和必须的函数,管理文件和引用关系。

  • 使用tuple。优点是编写简单,内存使用效率高。缺点是只能使用下标访问,可读性差,容易出错。

  • 使用dict,用str来作为对于属性的名字。优点是编写相对简单,而且保留了变量的名字。缺点是需要使用字符串表示名字较为麻烦,而且每一个结构都要保存作为名字的字符串,浪费空间。

collections的nametuple可以为我们直接构造一个具有名字的简单类型,方便快捷地实现类似手写了一个class的效果。
需要注意的是collections.nametuple是一个factory function,它用来帮我们创建一个类型,而不是这个类型的具体对象。创建类型时,我们可以指定各个属性的名字,之后就可以使用.来访问了,而且它同时还支持使用下标访问。同时Named Tuple还支持_asdict函数用来将内部的数值转换成一个dict。

# classclass Rect:def __init__(self, x1, y1, x2, y2):self.x1 = x1self.y1 = y1self.x2 = x2self.y2 = y2def area_class(r):w = r.x2 - r.x1h = r.y2 - r.y1return w*hr1 = Rect(1,3,5,5)# <__main__.Rect object at 0x7fde252a87f0># to show its content, we need to implement __repr__(self) or __str__(self)print(area_class(r1))# tupledef area_tuple(r):w = r[2]-r[0]h = r[3]-r[1]return w*hr2 = (1,3,5,5)print(r2)# (1, 3, 5, 5)print(area_tuple(r2))# dictdef area_dict(r):w = r["x2"] - r["x1"]h = r["y2"] - r["y1"]return w*hr3 = {"x1":1, "y1":3, "x2":5, "y2":5}print(r3)# {'x1': 1, 'y1': 3, 'x2': 5, 'y2': 5}print(area_tuple(r3))# named tupleimport collectionsRectangle = collections.namedtuple("Rectangle", ["x1", "y1", "x2", "y2"])def area_namedtuple(r):w = r.x2 - r.x1y = r.y2 - r.y1return w*hr4 = Rectangle(1,3,5,5)print(r4)# Rectangle(x1=1, y1=3, x2=5, y2=5)x1,y2,x2,y2 = r4print(x1,y2,x2,y2)# 1 3 5 5print(area_namedtuple(r4))print(area_class(r4)) # work with "." grammarprint(area_tuple(r4)) # work with indexprint(area_dict(r4._asdict())) # work with dict

Counter

顾名思义,Counter是用来对元素进行计数的,它也是collections这个包里的。根据Python的官方文档,它是dict类型的一个子类。
在构造的时候输入一个iterable的类型,比如list,range或是一个mapping的类型,比如dict,defaultdict。然后Counter就会对其中的元素进行计数。
比较特殊的是,Counter对负数没有做特殊处理,就是说在特殊操作下允许出现测试为负,后面我们会有例子。

c = Counter()                           # a new, empty counterc = Counter('gallahad')                 # a new counter from an iterableprint(c)# Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})c = Counter({'red': 4, 'blue': 2})      # a new counter from a mappingprint(c)# Counter({'red': 4, 'blue': 2})c = Counter(cats=4, dogs=8)             # a new counter from keyWord argsprint(c)# Counter({'dogs': 8, 'cats': 4})

除了基本的计数功能,它还支持一些常用的相关功能。比如:

  • 按照频率排序(most_common([n]))。其中n是可选输入,表示返回前n个最频繁的元素和他们的频率。默认情况下返回所有的元素。

  • 按照频率输出元素本身(elements())。它会返回元素本身,但是元素的顺序不是原来的,相同的元素会连续输出。不同元素之间,按照他们的出现顺序输出,这一点是OrderedDict以及3.7之后的dict所提供的特性。

  • 两个Counter相减(substract(c))。它可以从第一个counter上减去第二个counter中对应元素出现的次数。对于只出现在第二个coutner中元素,默认其在第一个counter中出现0次。

c = Counter(a=4, b=2, c=0, d=-2)sorted(c.elements())# ['a', 'a', 'a', 'a', 'b', 'b']Counter('abracadabra').most_common(3)# [('a', 5), ('b', 2), ('r', 2)]c1 = Counter(a=4, b=2, d=-2)c2 = Counter(a=1, b=2, c=3, d=4)c1.subtract(c2)c1# Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

关于python中有哪些内置数据结构就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: python中有哪些内置数据结构

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中有哪些内置数据结构
    这篇文章给大家介绍python中有哪些内置数据结构,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮...
    99+
    2023-06-14
  • Python中有什么内置数据结构
    本篇内容主要讲解“Python中有什么内置数据结构”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中有什么内置数据结构”吧!Python可谓是如今最流行的编程语言,甚至孩子们也可以从它...
    99+
    2023-06-16
  • linux内核中有哪些数据结构
    linux内核中的数据结构有:1.链表,用于解决数组不能动态扩展缺陷;2.队列,用于使得进程等待某一特定事件的发生;3.二叉树,可以提供分层树型数据结构的特定数据结构;linux内核中的数据结构有常见的几种链表链表是在解决数组不能动态扩展缺...
    99+
    2024-04-02
  • python中有哪些yaml数据结构
    这篇文章将为大家详细讲解有关python中有哪些yaml数据结构,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、数据结构(1)对象:键值对的集合(简称 "映射或字典")...
    99+
    2023-06-15
  • python内置数据结构
    1、列表--是一个序列,用于顺序的存储数据列表的定义与初始化In [374]: lst = list() In [375]: lst Out[375]: [] In [376]: lst = [] In [377]: lst = [1...
    99+
    2023-01-31
    数据结构 python
  • redis数据结构有哪些内容
    本篇内容主要讲解“redis数据结构有哪些内容”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“redis数据结构有哪些内容”吧!redis不只是一个简单的键(ke...
    99+
    2024-04-02
  • Python内置数据结构——bytes,
    bytes,bytearray字符串与bytes字符串是字符组成的有序序列,字符可以使用编码来理解bytes是字节组成的有序的不可变序列bytesarray是字节组成的有序的可变序列编码与解码字符串按照不同的字符集编码encode返回字序列...
    99+
    2023-01-31
    数据结构 Python bytes
  • Python内置数据结构3
    解构In [8]: lst = [1,2] In [9]: lst Out[9]: [1, 2] In [10]: first,second = lst  #解构 In [11]: print(first,second) 1 2按照元...
    99+
    2023-01-31
    数据结构 Python
  • Python中的常用数据结构有哪些?
    Python是一种高级编程语言,广泛应用于数据分析、机器学习、Web开发等领域。在Python中,有许多常用的数据结构,用于存储和处理数据。本文将介绍几种常见的数据结构,并提供相应的代码示例。列表(List):列表是Python中最常用的数...
    99+
    2023-10-22
    列表(list) 元组(tuple) 字典(Dict)
  • python线性数据结构有哪些
    python中的线性数据结构有堆栈、队列和链表三种堆栈堆栈是一种特殊的串列形式的数据结构,其特点是只能允许在链接串列或阵列的一端进行加入资料和输出资料的运算。队列队列是一种先进先出的线性表,队列允许在一端进行插入操作,而在另一端进行删除操作...
    99+
    2024-04-02
  • redis中有哪些数据结构
    小编给大家分享一下redis中有哪些数据结构,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!redis数据结构有哪些?字符串(strings):存储整数(比如计数器)和字符串(废话。。),有些公...
    99+
    2024-04-02
  • Python常用数据结构有哪些
    本篇内容介绍了“Python常用数据结构有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python 常用数据结构学习目的这个专题,尽量...
    99+
    2023-06-16
  • java中的数据结构有哪些
    java中的数据结构有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只...
    99+
    2023-06-14
  • Redis中都有哪些数据结构
    今天就跟大家聊聊有关Redis中都有哪些数据结构,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Redis核心对象在Redis中有一个「核心的对象」叫...
    99+
    2024-04-02
  • Mysql 5.7中Gtid相关内部数据结构有哪些
    本篇内容介绍了“Mysql 5.7中Gtid相关内部数据结构有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • java数据结构有哪些
    java中的数据结构有:1.ArrayList,链表;2.LinkedList,线性表;3.HashMap,提供了key-value键值对数据存储机制;4.HashSet,不允许存在重复元素;java中的数据结构有以下几种ArrayList...
    99+
    2024-04-02
  • mysql数据结构有哪些
    mysql 提供多种数据结构,包括:表、行、列、数据类型、约束、索引、视图和存储引擎。表用于组织相关数据,行表示数据记录,列表示数据字段,数据类型指定字段中存储的数据类型,约束强制对数据...
    99+
    2024-04-14
    mysql
  • golang有哪些数据结构
    golang中的数据结构有:1.string,字符串,内置类型,默认值为"";2.array,数组,具有相同唯一类型的一组已编号且长度固定的数据项序列;3.slice,切片,数组的抽象;4.map,集合,无序的、键值对的...
    99+
    2024-04-02
  • Python内置数据结构——列表list
    内置数据结构分类:数值型int , float , complex , bool序列对象字符串 str列表 listtuple(元组)键值对集合 set字典 dict数字型int ,float , complex , bool都是class...
    99+
    2023-01-31
    数据结构 列表 Python
  • python中常用的经典数据结构有哪些
    NumPy包中的数据结构NumPy中的数据结构,包括Ndarray、Matrix数组(Ndarray)创建Ndarray引入NumPy包,将其命名为np。在引入NumPy包后方可使用数组数据结构import numpy as np创建数组对...
    99+
    2023-05-14
    Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作