Python中的数据结构和算法:你需要知道的一切

已发表: 2020-05-06

Python中的数据结构和算法是计算机科学中两个最基本的概念。 它们是任何程序员不可或缺的工具。 Python 中的数据结构在程序处理数据时处理内存中数据的组织和存储。 另一方面, Python 算法指的是有助于为特定目的处理数据的详细指令集。

或者,可以说算法在逻辑上利用不同的数据结构来解决数据分析的特定问题。 无论是现实世界的问题还是典型的与编码相关的问题,如果您想提出准确的解决方案,了解Python 中的数据结构和算法至关重要。 在本文中,您将找到对不同Python 算法和数据结构的详细讨论。 如果您有兴趣了解有关 Python 的更多信息,请查看我们的数据科学课程

了解更多: R 中最常用的六种数据结构

目录

Python中的数据结构是什么?

数据结构是一种组织和存储数据的方式; 它们解释了数据和可以对数据执行的各种逻辑操作之间的关系。 数据结构的分类方法有很多种。 一种方法是将它们分类为原始和非原始数据类型。

原始数据类型包括整数、浮点数、字符串和布尔值,非原始数据类型是数组、列表、元组、字典、集合和文件。 其中一些非原始数据类型,例如 List、Tuples、Dictionaries 和 Sets,是 Python 内置的。 Python 中还有另一类数据结构是用户定义的。 也就是说,用户定义它们。 这些包括堆栈、队列、链表、树、图和哈希映射。

原始数据结构

这些是 Python 中包含纯和简单数据值的基本数据结构,并用作操作数据的构建块。 让我们谈谈Python中的四种原始变量类型:

  • 整数 -此数据类型用于表示数字数据,即不带小数点的正整数或负整数。 比如说,-1、3 或 6。
  • Float – Float 表示“浮点实数”。 它用于表示有理数,通常包含小数点,如 2.0 或 5.77。 由于 Python 是一种动态类型的编程语言,对象存储的数据类型是可变的,不需要显式声明变量的类型。
  • 字符串——此数据类型表示字母、单词或字母数字字符的集合。 它是通过在一对双引号或单引号中包含一系列字符来创建的。 要连接两个或多个字符串,可以对它们应用“+”操作。 重复、拼接、大写和检索是 Python 中的其他一些字符串操作。 示例:“蓝色”、“红色”等。
  • Boolean –此数据类型在比较和条件表达式中很有用,并且可以采用值 TRUE 或 FALSE。

了解更多: Python 中的数据框

内置非原始数据结构

与原始数据结构相比,非原始数据类型不仅存储值,而且存储不同格式的值的集合。 让我们看一下 Python 中的非原始数据结构:

    • 列表——这是 Python 中最通用的数据结构,它被写成一个用逗号分隔的元素列表,括在方括号内。 List 可以由异构和同类元素组成。 一些适用于列表的方法是 index()、append()、extend()、insert()、remove()、pop() 等。列表是可变的; 也就是说,它们的内容可以更改,保持身份不变。

资源

  • 元组——元组类似于列表,但不可变。 此外,与列表不同,元组是在括号内声明的,而不是在方括号内。 不变性的特点是一旦一个元素在一个元组中被定义,它就不能被删除、重新分配或编辑。 它确保数据结构的声明值不被操纵或覆盖。

资源

  • 字典——字典由键值对组成。 “key”标识一个项目,“value”存储项目的值。 冒号将键与其值分开。 这些项目用逗号分隔,整个项目用大括号括起来。 虽然键是不可变的(数字、字符串或元组),但值可以是任何类型。

资源

  • 集合——集合是唯一元素的无序集合。 像列表一样,集合是可变的并且写在方括号内,但没有两个值可以相同。 一些 Set 方法包括 count()、index()、any()、all() 等。

资源

  • 列表与数组——Python 中没有内置的数组概念。 可以在初始化数组之前使用 NumPy 包导入数组。 要了解更多关于 NumPy 的信息,可以查看我们的 python NumPy 教程 Lists 和 Arrays 除了一个不同点之外大部分是相似的——虽然 Arrays 是仅同质元素的集合,但 Lists 包括同质项和异质项。

结帐:二叉树的类型

Python中用户定义的数据结构

接下来我们讨论Python中的数据结构和算法是对不同用户定义的数据结构的简要概述:

  • 堆栈——堆栈是 Python 中的线性数据结构。 在堆栈中存储项目基于先进/后出 (FILO) 或后进/先出 (LIFO) 的原则。 在 Stacks 中,在一端添加一个新元素的同时从同一端删除一个元素。 “push”和“pop”操作分别用于插入和删除。 与 Stack 相关的其他函数有 empty()、size() 和 top()。 堆栈可以使用 Python 库中的模块和数据结构来实现 - list、collections.deque 和 queue.LifoQueue。
  • 队列——类似于堆栈,队列是线性数据结构。 但是,项目是根据先进先出 (FIFO) 原则存储的。 在队列中,最近最少添加的项目首先被删除。 与Queue相关的操作包括Enqueue(添加元素)、Dequeue(删除元素)、Front和Rear。 与 Stacks 一样,队列可以使用 Python 库中的模块和数据结构来实现——list、collections.deque 和 queue。
  • 树——树是 Python 中的非线性数据结构,由边连接的节点组成。 树的属性是一个节点被指定为根节点,除根外,每个其他节点都有一个关联的父节点,每个节点可以有任意数量的子节点。 二叉树数据结构是其元素不超过两个孩子的结构。
  • 链表——通过链接连接在一起的一系列数据元素在 Python 中称为链表。 它也是一种线性数据结构。 链表中的每个数据元素都使用指针连接到另一个数据元素。 由于 Python 库不包含链接列表,因此它们是使用节点的概念来实现的。 与数组相比,链接列表具有动态大小的优势,易于插入/删除元素。
  • 图形——Python 中的图形以图形方式表示一组对象,其中一些对象对通过链接连接。 顶点表示相互连接的对象,连接顶点的链接称为边。 Python 字典数据类型可用于呈现图形。 本质上,字典的“键”表示顶点,“值”表示顶点之间的连接或边。
  • HashMaps/Hash Tables——在这种类型的数据结构中,哈希函数生成数据元素的地址或索引值。 索引值用作数据值的键,允许更快地访问数据。 与字典数据类型一样,哈希表具有键值对,但哈希函数会生成键。

Python中的算法是什么?

Python 算法是一组指令,执行这些指令以获得给定问题的解决方案。 由于算法不是特定于语言的,它们可以用几种编程语言来实现。 没有标准规则指导算法的编写。 它们依赖于资源和问题,但共享一些常见的代码结构,例如流控制(if-else)和循环(do、while、for)。 在以下部分中,我们将简要讨论树遍历、排序、搜索和图算法。

树遍历算法

遍历是从根节点开始访问树的所有节点的过程。 一棵树可以通过三种不同的方式遍历:

– 中序遍历涉及首先访问左侧的子树,然后是根,然后是右子树。

– 在前序遍历中,首先访问的是根节点,其次是左子树,最后是右子树。

– 在后序遍历算法中,首先访问左子树,然后访问右子树,最后访问根节点。

了解更多:如何创建完美的决策树

排序算法

排序算法表示以特定格式排列数据的方法。 排序确保数据搜索被优化到高水平,并且数据以可读的格式呈现。 让我们看一下 Python 中五种不同类型的排序算法:

  • 冒泡排序 -该算法基于比较,如果相邻元素的顺序不正确,则重复交换它们。
  • 合并排序——基于分治算法,合并排序将数组分成两半,对它们进行排序,然后组合它们。
  • 插入排序——这种排序从比较和排序前两个元素开始。 然后,将第三个元素与之前排序的两个元素进行比较,依此类推。
  • 壳排序——它是插入排序的一种形式,但在这里,对远处的元素进行排序。 对给定列表的大子列表进行排序,并且列表的大小逐渐减小,直到所有元素都被排序。
  • 选择排序 -该算法首先从元素列表中找到最小值并将其放入排序列表中。 然后对列表中未排序的每个剩余元素重复该过程。 将进入排序列表的新元素与其现有元素进行比较并放置在正确的位置。 该过程继续进行,直到所有元素都被排序。

搜索算法

搜索算法有助于从不同的数据结构中检查和检索元素。 一种类型的搜索算法应用顺序搜索的方法,其中顺序遍历列表,并检查每个元素(线性搜索)。 在另一种类型的区间搜索中,在排序的数据结构中搜索元素(二分搜索)。 让我们看一些例子:

  • 线性搜索——在此算法中,每个项目都按顺序逐一搜索。
  • 二分搜索 –搜索间隔被重复分成两半。 如果要搜索的元素低于区间的中心分量,则区间缩小到下半部分。 否则,它会缩小到上半部分。 重复该过程,直到找到该值。

图算法

有两种使用边遍历图的方法。 这些是:

  • 深度优先遍历 (DFS) –在该算法中,图形以深度运动方式遍历。 当任何迭代面临死胡同时,堆栈用于转到下一个顶点并开始搜索。 DFS 使用设置的数据类型在 Python 中实现。
  • 广度优先遍历 (BFS) -在该算法中,图以广度运动进行遍历。 当任何迭代面临死胡同时,使用队列去下一个顶点并开始搜索。 BFS 是在 Python 中使用队列数据结构实现的。

算法分析

  • 先验分析——这代表了算法在实施之前的理论分析。 通过假设诸如处理器速度等因素是恒定的并且对算法没有影响来衡量算法的效率。
  • 后验分析——这是指算法实施后的经验分析。 编程语言用于实现所选算法,然后在计算机上执行。 此分析收集统计信息,例如算法运行所需的时间和空间。

结论

无论你是编程老手还是新手,都不能忽视Python 中的数据结构和算法 当您对数据执行操作时,这些概念至关重要,您需要优化数据处理。 虽然数据结构有助于组织信息,但算法提供了解决数据分析问题的指导方针。 它们共同为计算机科学家提供了一种处理作为输入数据给出的信息的方法。

如果您想了解数据科学,请查看 IIIT-B 和 upGrad 的数据科学执行 PG 计划,该计划是为在职专业人士创建的,提供 10 多个案例研究和项目、实用的实践研讨会、行业专家的指导、1与行业导师一对一,400 多个小时的学习和顶级公司的工作协助。

学习数据结构和算法需要多少天?

谈到计算机科学,数据结构和算法被认为是所有主题中最难的。 但是,对于每个程序员来说,学习它们真的很重要。 如果您每天花费大约 3-4 小时,那么您将需要至少 6 到 8 周的时间来学习数据结构和算法。

这里没有严格的时间表,因为它完全取决于你的速度和学习能力。 如果你擅长掌握基础知识,那么你会发现很容易理解数据结构和算法的深入概念。

算法有哪些不同类型?

算法是解决任何问题都必须遵循的逐步过程。 不同的问题需要不同的算法来解决问题。 每个程序员都会根据算法的要求和速度来选择解决特定问题的算法。

尽管如此,程序员通常会考虑使用某些顶级算法来解决不同的问题。 一些著名的算法是蛮力算法、贪婪算法、随机算法、动态规划算法、递归算法、分治算法和回溯算法。

Python的主要用途是什么?

Python 是一种通用编程语言,用于执行不同的活动。 Python 最好的一点是它不绑定到任何特定的应用程序,您可以根据需要使用它。 由于库的可用性、多功能性和易于理解的结构,它被认为是开发人员中最常用的编程语言之一。

Python主要用于网站和软件的开发。 除此之外,它还用于任务自动化、数据可视化和数据分析。 Python 很容易学习,这就是为什么即使是非程序员也采用这种语言来组织财务和执行其他日常任务的原因。