概述数据结构是组织数据的方式,以便能够更好的存储和获取数据。数据结构定义数据之间的关系和对这些数据的操作方式。数据结构屏蔽了数据存储和操作的细节,让程序员能更好的处理业务逻辑,同时拥有快速的数据存储和获取方式。 在这篇文章中,你将了解到多种数据结构以及这些数据结构在Python中实现的方式。希望大家能学以致用! 抽象数据类型和数据结构数据结构是抽象数据类型(ADT)的实现,通常,是通过编程语言提供的基本数据类型为基础,结合相应的代码来实现。 通常来说,数据结构分为两类:原始数据结构和非原始数据结构,原始数据结构是用来表示简单的数据关系,非原始数据结构包含原始数据结构,同时,数据关系更加复杂,数据操作也更加复杂。 原始数据结构原始数据结构 - 顾名思义 - 是最原始的或基本的数据结构。 它们是数据操作的构建块,包含纯粹,简单的数据值。 Python有四种原始变量类型:
Integers您可以使用Integers表示数字数据,具体地说,可以使用从负无穷大到无穷大的整数 Float“Float”代表“浮点数”。 您可以将它用于有理数,通常以十进制数字结尾,例如1.11或3.14。 请注意,在Python中,您不必显式声明变量或数据的类型。 那是因为Python是一种动态类型语言。 动态类型语言是对象可以存储的数据类型是可变的语言。 StringString是字母,单词或其他字符的集合。 在Python中,您可以通过在一对单引号或双引号中包含一系列字符来创建字符串。 例如:‘cake’,“cookie”等。您还可以对两个或多个字符串应用+操作来连接它们,就像下面的示例中一样: x = 'Cake' 以下是您可以使用字符串执行的一些其他基本操作; 例如,您可以使用*重复字符串一定次数: # Repeat 您还可以切割字符串 z1 = x[2:] 请注意,字符串也可以是字母数字字符,但+操作仍然用于连接字符串。 x = '4' Python有许多内置方法或辅助函数来操作字符串。 替换子字符串,大写段落中的某些单词,在另一个字符串中查找字符串的位置是一些常见的字符串操作。 例如:
str.capitalize('cookie')
str1 = "Cake 4 U"
str1 = "Cake 4 U"
str1 = "Cake 4 U"
str1 = 'cookie' Boolean这种内置数据类型值为:True和False,这通常使它们可以与整数1和0互换。布尔值在条件和比较表达式中很有用,就像在下面的例子中一样: x = 4 数据类型转换有时,你需要整型,但是接口返回给你的是字符串,这时,你就需要数据类型转换,Python里,可以使用type函数来查看数据类型。 i = 4.0 当你把数据的类型改变时,就称作数据类型转换。数据类型转换分为两种:隐式转换和显示转换。 隐式数据类型转换数据类型自动转换,不需要指定,编译器会为您处理。 看看以下示例: # float 在上面的示例中,您不必将x的数据类型显式更改为float以执行浮点值除法。 编译器隐式地为你做了这个。 显式数据类型转换这种类型的数据类型转换是用户定义的,这意味着您必须明确地通知编译器更改某些实体的数据类型。例如: x = 2 上面的示例,没有明确的告诉编译器x,y的数据类型,编译器认为x为整型,y为字符串,当你试图连接字符串和整数,编译器报错了,这个问题你可以这样解决: x = 2 python内置了一些类型转换函数:int(), float(), 和 str() 非原始数据结构非原始数据结构的数据关系更加复杂,主要包括:
Arrays 首先,Python中的数组是一种收集基本数据类型的紧凑方式,数组中的所有条目必须具有相同的数据类型。 但是,与其他编程语言(如C ++或Java)不同,数组在Python中不常用。 import array as arr ListsPython中的列表用于存储同类项的集合。 这些是可变的,这意味着您可以在不改变其身份的情况下更改其内容。 您可以通过方括号[和]来识别列表,其中包含以逗号分隔的元素。 列表内置于Python中:您无需单独调用它们。 x = [] 注意:就像您在上面的示例中看到的x1一样,列表也可以保存异构项,从而满足数组的存储功能。 除非您想对此集合应用某些特定操作。
list_num = [1,2,45,6,7,2,90,23,435]
list_num.insert(0, 11)
list_char.remove('o')
list_char.pop(-2) # Removes the item at the specified position Array vs List你可能想,既然List那么方便,为什么还要Array,这是因为由于Array存储的数据类型一致,可以通过简单的函数完成一些特殊的操作。例如 array_char = array.array("u",["c","a","t","s"]) 您可以应用array_char的tostring()函数,因为Python知道数组中的所有项都具有相同的数据类型,因此操作在每个元素上的行为方式相同。 因此,在处理大量同类数据类型时,数组非常有用。 因为Python不必单独记住每个元素的数据类型细节; 对于某些用途,与列表相比,数组可能更快并且使用更少的内存。 在我们讨论数组的主题时,还值得提一下NumPy数组。 NumPy数组在数据科学领域中被广泛用于处理多维数组。 它们通常比数组模块和Python列表更有效。 在NumPy数组中读取和写入元素更快,并且它们支持“矢量化”操作,例如元素添加。 此外,NumPy数组可以有效地处理大型稀疏数据集。例如: import numpy as np 通常,列表数据结构可以进一步分类为线性和非线性数据结构。 堆栈和队列称为线性数据结构,而图形和树是非线性数据结构。 这些结构及其概念可能相对复杂,但由于它们与现实世界模型的相似性而被广泛使用。 注意:在线性数据结构中,数据项按顺序组织。 数据项一个接一个地遍历,并且可以在单次运行期间遍历线性数据结构中的所有数据项。 但是,在非线性数据结构中,数据项不是按顺序组织的。 这意味着元素可以连接到多个元素,以反映这些项目之间的特殊关系。 在单次运行期间,可能无法遍历非线性数据结构中的所有数据项。 Stack堆栈是根据Last-In-First-Out(LIFO)概念插入和移除的对象的容器。 想象一下这样一种场景,即在一个有一堆盘子的晚宴上,总是在堆顶部添加或移除盘子。 在计算机科学中,这个概念用于评估表达式和语法分析,调度算法/例程等。 可以使用Python中的列表来实现堆栈。 将元素添加到堆栈时,它被称为推送操作,而当您删除或删除元素时,它被称为弹出操作。 请注意,当您在Python中使用堆栈时,实际上有一个pop()方法可供使用: # Bottom -> 1 -> 2 -> 3 -> 4 -> 5 (Top) Queue 队列是根据先进先出(FIFO)原则插入和移除的对象的容器。 在现实世界中排队的一个很好的例子是售票柜台的线路,根据他们的到达顺序上车,因此首先到达的人也是第一个离开的人。 Graphs 数学和计算机科学中的图是由节点组成的网络,节点也称为顶点,它们可以相互连接,也可以不相互连接。 连接两个节点的线或路径称为边。 如果边缘具有特定的流动方向,那么它是有向图,方向边缘被称为弧。 否则,如果未指定方向,则该图形称为无向图。 graph = { "a" : ["c", "d"], 您可以使用Graph做一些很酷的事情,例如尝试找到两个节点之间存在路径,或者找到两个节点之间的最短路径,确定图形中的周期。 事实上,着名的“旅行商问题”是找到一个最短路径,它只访问每个节点一次并返回起点。 有时图形的节点或弧已经分配了权重或成本,您可以将其视为指定行走难度级别,并且您有兴趣找到最便宜或最简单的路径。 Tree现实世界中的一棵树是一种生物,它的根在地上,树枝上有叶子、果实。树的分支以一种有组织的方式展开。在计算机科学中,树被用来描述数据如何被组织,除了根在顶部并且树枝,树叶跟随,向底部蔓延并且树被绘制为与真实树相比被倒置。 为了引入更多的符号,根始终位于树的顶部。后面的其他节点称为分支,每个分支中的最终节点称为叶。您可以将每个分支想象成一个较小的树本身。根通常称为父节点,它在其下面引用的节点称为子节点。具有相同父节点的节点称为兄弟节点。 树有助于定义现实世界场景,并且从游戏世界到设计XML解析器,以及PDF设计原则都基于树。在数据科学中,“基于决策树的学习”实际上构成了一个大范围的研究。存在许多着名的方法,如装袋,提升使用树模型来生成预测模型。像国际象棋这样的游戏构建了一棵巨大的树,其中包含所有可能的动作来分析和应用启发式方法来决定最佳操作。 class Tree: Tuples元组是另一种标准序列数据类型。 元组和列表之间的区别在于元组是不可变的,这意味着一旦定义,您就无法删除,添加或编辑其中的任何值。 这可能在您可能将控件传递给其他人但您不希望它们操纵集合中的数据但可能只是在数据副本中看到它们或单独执行操作的情况下有用。例如 x_tuple = 1,2,3,4,5 Dictionary如果你想实现类似于电话簿的东西,字典是要使用的数据结构。 您之前看到的所有数据结构都不适用于电话簿。 这是一本字典可以派上用场的时候。 字典由键值对组成。 x_dict = {'Edward':1, 'Jorge':2, 'Prem':3, 'Elisa':4} 您可以在词典上应用许多其他内置功能: len(x_dict) Sets集合是唯一对象的集合。 这些对于创建仅在数据集中包含唯一值的列表很有用。 它是一个无序的集合,但是一个可变的集合。 x_set = set('CAKE&COKE') Files文件传统上是数据结构的一部分。 虽然大数据在数据科学行业中很常见,但是没有存储和检索先前存储的信息的能力的编程语言几乎没有用。在Python中读取和写入文件的语法与其他编程语言类似,但更容易处理。 以下是一些可帮助您使用Python处理文件的基本功能:
# File modes (2nd argument): 'r'(read), 'w'(write), 'a'(appending), 'r+'(both reading and writing) open()函数中的第二个参数是打开文件模式。 它允许您指定是要读取(r),写入(w),追加(a)还是读取和写入(r +)。 总结到此,好学的你对Python的数据结构已经有了一个基本的了解了。看完了归看完了,需要勤劳的你动手操练起来呀! |
|
来自: 千锋Python学堂 > 《Python基础教程分享》