当前位置: 首页 > news >正文

python创建列表_Python编程—Python基本数据结构详解

3c9561aca460dda24d0d8b5e60325072.gif点击蓝字关注我们

AI研习图书馆,发现不一样的世界

编程语言

Python中常见数据结构详解

概述

  • 在深入研究数据科学和模型构建之前,Python中的数据结构是一个需要学习的关键内容

  • 了解Python提供的不同数据结构,包括列表、元组等

介绍

数据结构听起来是一个非常直截了当的话题,但许多数据科学和分析的新手并不知道它是什么,当我询问这些人关于Python中不同的数据结构以及它们是如何工作的时,他们一片空白。 Python是一种很容易学习的编程语言,但是我们需要先弄清楚我们的基本知识,然后再深入研究有吸引力的机器学习。这是因为在我们执行的每一个数据探索任务背后,甚至我们采取的分析步骤背后,都有一个数据存储和组织的基本元素。 而且这是一个无需考虑的问题——当我们高效地存储数据时,提取信息会变得非常容易,由于我们的代码运行得更快,我们节省了大量的时间——谁不希望这样呢? 所以我希望你掌握Python中的数据结构。
8f21f0f3a80c074fd55a4ab6f0353316.png

在本文中,我们将探讨Python中的基本内置数据结构,当你在现实世界中处理数据时,这些结构将非常有用。所以无论你是数据科学家还是分析师,这篇文章对你来说都同样重要。

目录

  • Python中的数据结构

  • 数据结构1:Python中的列表

    • 创建列表

    • 访问列表元素

    • 在列表中追加值

    • 从列表中删除元素

    • 排序列表

    • 串联列表

    • 列表推导式

    • 使用列表堆栈和队列

  • 数据结构2:Python中的元组

    • 在Python中创建元组

    • 元组的不变性

    • 元组赋值

    • 更改元组值

  • 数据结构3:Python中的字典

    • 生成字典

    • 访问键和值

  • 数据结构4:Python中的集合

    • 从集合中添加和删除元素

    • 集合的操作

Python中的数据结构

数据结构是高效存储和组织数据的一种方法,它允许你轻松访问和执行数据操作。

在数据结构方面,没有一种适合所有类型的模型。你将需要以不同的方式存储数据,以满足一时需要。也许你想把所有类型的数据存储在一起,或者你想要一些更快的数据搜索,或者一些只存储不同数据项的东西。

幸运的是,Python有许多内置的数据结构,可以帮助我们轻松地组织数据,因此有必要先了解这些,以便我们在处理数据时,确切地知道哪些数据结构将有效地解决我们的目的。

数据结构1:Python中的列表

Python中的列表是最通用的数据结构,它们用于存储异构数据项,从整数到字符串,甚至是另一个列表!它们也是可变的,这意味着即使在创建列表之后,它们的元素也可以更改。

创建列表

列表是通过将元素括在[]内创建的,每个项用逗号分隔:

eccd905a0c35dfaf5b9b93834436ef44.png

由于列表中的每个元素都有自己不同的位置,因此在列表中具有重复的值不是问题:

bc6c3826c85b2a3b5332da2cb1ea08b2.png

访问列表元素

我们使用索引来访问列表的元素。列表中的每个元素都有一个与其相关的索引,这取决于它在列表中的位置。列表的第一个元素有索引0,下一个元素有索引1,依此类推。列表的最后一个元素的索引小于列表的长度。

00ade4a2eae97d13e864adf5b0bac597.png

但索引不一定总是正的,也可能是负的。你认为负索引意味着什么?

正索引从列表起始位置开始计数,而负索引从列表末尾开始计数。如果我们想从列表的末尾返回第n个元素,这就避免了我们必须执行的琐碎计算。因此,对于列表的最后一项,我们不需要返回List_name[len(List_name)-1] 元素,只需编写List_name[-1]

使用负索引,我们可以轻松地返回列表末尾的第n个元素。如果我们想从结尾返回第一个元素,或者最后一个索引,那么关联的索引是-1。类似地,倒数第二个元素的索引将是-2,依此类推。记住,第0个索引仍然引用列表中的第一个元素。

8d8a16a781703fd0d06d336a83c266b8.png

但是如果我们想返回列表中两个位置之间的一系列元素呢?这叫做切片。我们要做的就是指定开始和结束索引,例如List_name[start : end]

6c5e51d3f5fe1c3a69015bf0700a1bb8.png

这里要记住的一件重要的事情是,结束索引处的元素永远不包含在内,只返回从开start索引到等于end-1索引的元素。

在列表中追加值

我们可以使用**append()**或 insert() 方法向现有列表中添加新元素:

  • append(),在列表末尾添加一个元素

  • insert(),在指定的特定位置将元素添加到列表

0ed9bce4fb1692777b69f9a60063458d.png

从列表中删除元素

从列表中删除元素与添加元素一样简单,可以使用**remove()pop()**方法完成:

  • remove()–从列表中删除与给定值匹配的第一个匹配项

  • pop()–当我们要从列表中移除指定索引处的元素时使用。但是如果我们不提供索引值,最后一个元素将从列表中删除

ad7c388574c512292b12a7879e51f632.png

排序列表

大多数情况下,你将使用列表对元素进行排序。因此了解**sort()**方法非常重要。它允许你按升序或降序对列表元素进行就地排序:

ed0eb028aa94bae4d09ef71e869f33c7.png

但是当你想要对包含字符串元素的列表进行排序时,事情就变得有点棘手了。你如何比较两个字符串?好吧,字符串值是使用字符串中字符的ASCII值排序的,字符串中的每个字符都有一个与其关联的整数值,我们使用这些值对字符串进行排序。

在比较两个字符串时,我们只是从一开始比较每个字符的整数值。如果在两个字符串中遇到相同的字符,我们只需比较下一个字符,直到找到两个不同的字符。当然这是内部完成的,所以你不必担心!

39bc7526912429005419f13b9bb81992.png

合并列表

我们甚至可以通过简单地使用+符号连接两个或多个列表,这会返回一个新列表,其中包含两个列表中的元素:

821c9a884906d21b3344824ff1b0b3c0.png

列表推导式

列表的一个非常有趣的应用是列表推导式,它提供了一种创建新列表的简洁方法。这些新列表是通过对现有列表的每个元素应用操作创建的。如果我们首先检查一下如何使用旧的for循环来完成它:

ffd2e5ab4b50dc62599191f9baa09c89.png

现在,我们将看到如何使用列表理解简洁地执行此操作:

1250c541087bce7a519db4ffadb7660c.png

看到区别了吗?列表推导式对于任何数据科学家来说都是一项有用的语法,因为你可以看到和编写简明易读的代码!

堆栈和队列

列表是Python中内置的数据结构,但我们可以使用它来创建用户定义的数据结构。使用列表构建的两种非常流行的用户定义数据结构是栈和队列。

栈是一个元素列表,其中元素的添加或删除是从列表的末尾开始的,可以把它想象成一堆书,当你需要从书堆中添加或删除一本书时,你可以从顶部开始。它使用了后进先出的简单概念。

cec492d4ccee0e5362ec1e4566af9857.png

另一方面,队列是一个元素列表,其中元素的添加发生在列表的末尾,而元素的删除则发生在列表的前面。你可以把它想象成现实世界中的一个队列,当前面的人离开队列时,队列变短;当有新成员从末尾添加到队列中时,队列将变长。它使用先进先出的概念。

723a2d09beaeceec9a227e581bf96fbf.png

现在,作为一个数据科学家或分析师,你可能不是每天都在使用这个概念,但是当你必须构建自己的算法时,它肯定会帮助你!

数据结构2:Python中的元组

元组是Python中另一种非常流行的内置数据结构,它们与列表非常相似,只不过有一个区别,它们是不可变的,这意味着一旦生成元组,就不能添加、删除或编辑任何值。

我们将进一步探讨这个问题,但首先让我们看看如何在Python中创建元组!

在Python中创建元组

元组可以通过在(括号)内写入值来生成,每个元素用逗号分隔,但是即使你写了一堆没有任何括号的值并把它们赋给一个变量,你最终还是会得到一个元组!

7a83910cbf9db1e19b9c6c43636d6549.png

好了,现在我们知道了如何创建元组,让我们讨论一下不变性。

元组的不变性

在Python中,任何在创建后不能修改的内容都是不可变的。Python语言可以分解为可变和不可变的对象。

列表、字典、集合(我们将在后面的章节中探讨这些)是可变对象,这意味着它们可以在创建后修改;另一方面,整数、浮点数、布尔值、字符串甚至元组都是不可变的对象,但是,是什么使它们不可改变呢?

Python中的所有内容都是一个对象,所以我们可以使用内置的**id()**方法来检查对象的内存位置,这被称为对象的标识。让我们创建一个列表并确定列表及其元素的位置:

52fcdd56347636f7ecd8ab9fffc5907f.png

如你所见,列表及其元素在内存中都有不同的位置。因为我们知道列表是可变的,所以我们可以改变其元素的值。让我们这样做,看看它如何影响:

be9e7ce08947c7c5565cb74ac1961924.png

列表的位置没有改变,但元素的位置改变了,这意味着为元素创建了一个新对象并保存在列表中,这就是可变的意思。可变对象可以在创建后更改其状态或内容,但不可变对象不能这样做。

但是我们可以调用元组为不可变,因为即使它们是不可变的,它们也可以包含其值可以修改的可变对象!

f23d66cb406380bc1ddaaa321e5e0ed8.png

从上面的示例中可以看到,我们能够更改元组中包含的不可变对象list的值。

元组赋值

元组打包和解包是一些有用的操作,你可以执行这些操作来将值赋给单行中另一个元组。

当我们制造元组时,我们已经看到了元组的打包。元组解包与打包相反。

e3026da3f15a44ecc438dff1013b0871.png

它对于在一行中交换值非常有用。老实说,这是让我对Python感到兴奋的第一件事,能够用这么少的代码做这么多事情!

更改元组值

虽然我说过元组值不能更改,但实际上可以通过使用list()将其转换为列表来对其进行更改。完成更改后,可以再次使用tuple()将其转换回元组。

1355b6e5ab3d5878366cc473231a3af4.png 然而,这种更改非常昂贵,因为它需要复制元组,但是当你不希望其他人更改数据结构的内容时,元组就派上了用场。

数据结构3:Python中的字典

Dictionary是另一种Python数据结构,用于存储不可变但无序的异构对象,这意味着当你试图访问这些元素时,它们的顺序可能与你插入它们的顺序不完全相同。

但是,使词典与列表区别开来的是元素在其中的存储方式。字典中的元素是通过它们的键值而不是它们的索引来访问的,正如我们在列表中所做的那样,所以字典包含键值对,而不仅仅是单个元素。

生成词典

字典是通过{}括号内写入键和值生成的。每个键值对用逗号分隔:

32f4ce2ad00ba3c5a97cf438c374f5f1.png

使用键,我们可以轻松提取关联值:

4e25cc2fab2245c6e26f2558dbdf449a.png

这些键是独一无二的,即使字典中有多个项具有相同的键,项的值为最后一个键关联的值:

9cf6ede2cecc70b48ab12259c337f946.png

字典对于快速访问项非常有用,因为与列表和元组不同,字典不必遍历所有找到值的项。字典使用哈希提高性能。

访问键和值

你可以使用 keys() 方法从字典访问键,使用**values()方法访问值。我们可以使用for循环查看它们,也可以使用list()**将它们转换为列表:

5809bf1e9ddef809ee799f6d1ca65b49.png

我们甚至可以使用**items()**方法同时访问这些值,该方法返回字典中每个元素的相应键值对。

b374c80f8dc9421becc14c1e4cb5778a.png

数据结构4:Python中的集合

有时不希望在列表或元组中多次出现同一个元素。在这里,你可以使用集合数据结构。Set是一个无序但可变的元素集合,它只包含唯一的值。

317b68e565337419444b174f8634faf6.png

你将看到这些值的顺序与在集合中输入的顺序不同,这是因为集合是无序的。

从集合中添加和移除元素

要向集合中添加值,请使用**add()**方法,它允许你添加除可变对象以外的任何值:

08bd7dda71bae07375c488027ad64e45.png

要从集合中移除值,有两个选项可供选择:

  • 第一个是**remove()**方法,如果元素不在集合中,它会给出一个错误

  • 第二个是discard() 方法,它删除元素,但当元素不在集合中时不会出错

b03c0962aebe16a8257f063460318012.png

如果该值不存在,remove()将给出一个错误,而discard() 则不会。

a8b0155995ea9d98e77c102bf3b072c5.png

集合操作

使用Python集合,你可以执行两个集合之间的并集、交集和差集等操作,就像在数学中一样。

两个集合的并集给出两个集合的值,这些值是独一无二的。因此,如果两个集合包含相同的值,则只返回一个副本:

5a0f140b8656e675c274176f4207584f.png

两个集合的交集只返回两个集合共有的值:

38f7fa7f1a9e6292d9873191e134acb2.png

一个集合与另一个集合的差集只给出第一个集合中不存在的值:

41715791337febbe75995b1303473b26.png

结尾

Python是一种很好的语言。它为你提供了许多选项来更有效地处理数据,学习Python中的数据结构是你学习过程中的一个关键。

参考文献:

https://www.analyticsvidhya.com/blog/2020/06/data-structures-python/

☆ END ☆

推荐阅读文章

[1] AI入门-人工智能的前世今生[2] AI入门-深度学习综述[3] AI入门-计算机视觉学习指南[附资源][4] 深度学习框架总结—国际篇[5] 深度学习-CNN结构设计技巧[6] 资源分享-深度学习及数据分析等资源合集

[7] 今日分享—统计学习方法

[8] 算法总结—人脸检测算法

[9] 目标检测算法-YOLOv4 

[10] 项目总结—人脸检测

[11] 数据结构与算法-Python语言案例实现

[12] 深度学习基础-二十种损失函数

[13] 深度学习-目标检测的十九个研究方向

[14] 项目实战-车辆检测案例实现

[15] 卷积神经网络-可变形卷积[上]

[16] 图像识别—EfficientNet算法详细总结

[17] 世界读书日—机器学习西瓜书|附下载链接

[18] 面试指南-算法岗如何针对性的准备校招面试

   ......

013ee418c57b5c9f992675dd53e10bc7.gif 5a7f1b2f9f148c139c3781b02cafe97a.png点击"在看"了解更多精彩内容 752c50d32dcc30f5c4e7dc19b55fe448.png cbe068ab4c38be81a0970f810f38785c.png转载是一种动力 分享是一种美德 4c5832cadd7d23002801a87f2a8136cb.pngBilibili : 洛必达数数CSDN博客:算法之美DLGitHub:statisticszhang 50390f2ec4c88ad848ea45c533b9c91e.png

关注AI研习图书馆,发现不一样的精彩世界

58d1bd2d3e2a8b7ce703938497f9887e.png

相关文章:

  • python列表转化字典_python 列表转为字典的两个小方法(小结)
  • git敏感信息脚本_拥有了此神技 ,脚本调试从此与 echo、set、test 说分手
  • python数据分析与应用 百度网盘_Python数据分析师特训营(完整版),2020最新Python课程百度云下载...
  • c++代码示例_2个小时学会源代码审计
  • python字典程序题_笨办法学Python 习题 39: 字典, 可爱的字典
  • python 数学公式_线性回归算法用到的数学公式及python实现
  • delphi中的函数传参如何传枚举参数_函数调用背后的秘密——传参与返回值
  • python字符串处理函数汇总_超详细!盘点Python中字符串的常用操作
  • java接口应用在哪些方面_掏空了各大搜索引擎,整理了154道Java面试题!
  • flutter框架优缺点_2020年,一文点破跨平台开发框架现状
  • collect的功能是什么?其底层如何实现的?_用Python实现定时自动化收取蚂蚁森林能量,再也不怕被偷了...
  • docker python_「docker实战篇」python的docker-docker镜像的创建使用命令(32)
  • 在android studio中如何创建一个类来继承另外一个类_Python编程从入门到实践-连载8(类)...
  • python气象绘图速成_Python气象数据处理与绘图(11):矢量箭头图(风场,通量场)
  • ubuntu 自动挂载共享文件夹 /etc/fstab_使用 Cobbler 批量自动化部署 Windows 10 和 Windows Server 2019...
  • Google 是如何开发 Web 框架的
  • [译]CSS 居中(Center)方法大合集
  • CAP理论的例子讲解
  • docker python 配置
  • Java的Interrupt与线程中断
  • JS基础之数据类型、对象、原型、原型链、继承
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • supervisor 永不挂掉的进程 安装以及使用
  • vue 个人积累(使用工具,组件)
  • Zsh 开发指南(第十四篇 文件读写)
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 如何合理的规划jvm性能调优
  • 微信开放平台全网发布【失败】的几点排查方法
  • 我与Jetbrains的这些年
  • 移动端唤起键盘时取消position:fixed定位
  • 用Visual Studio开发以太坊智能合约
  • ​ubuntu下安装kvm虚拟机
  • ​决定德拉瓦州地区版图的关键历史事件
  • (02)Hive SQL编译成MapReduce任务的过程
  • (HAL库版)freeRTOS移植STMF103
  • (十)c52学习之旅-定时器实验
  • (一)Thymeleaf用法——Thymeleaf简介
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • ***监测系统的构建(chkrootkit )
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net core 6 redis操作类
  • .NET Framework与.NET Framework SDK有什么不同?
  • .net MVC中使用angularJs刷新页面数据列表
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .net经典笔试题
  • /bin/rm: 参数列表过长"的解决办法
  • @ComponentScan比较
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [2544]最短路 (两种算法)(HDU)
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用