【Python】6. 基础语法(4) -- 列表+元组+字典篇

列表和元组

列表是什么, 元组是什么

编程中, 经常需要使用变量, 来保存/表示数据.
如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可.

num1 = 10
num2 = 20
num3 = 30
......

但是有的时候, 代码中需要表示的数据特别多, 甚至也不知道要表示多少个数据. 这个时候, 就需要用到列表.
列表是一种让程序猿在代码中批量表示/保存数据的方式(就类似于其他编程语言中的“数组")

就像我们去超市买辣条, 如果就只是买一两根辣条, 那咱们直接拿着辣条就走了.
但是如果一次买个十根八根的, 这个时候用手拿就不好拿, 超市老板就会给我们个袋子.
这个袋子, 就相当于 列表

元组和列表相比, 是非常相似的, 只是列表中放哪些元素可以修改调整, 元组中放的元素是创建元组的时候就设定好的, 不能修改调整
列表是可变的:创建好了之后,随时能改
元组是不可变的:创建好了之后,改不了.要想改,只能丢弃旧的,搞个新的

列表就是买散装辣条, 装好了袋子之后, 随时可以把袋子打开, 再往里多加辣条或者拿出去一些辣条.
元组就是买包装辣条, 厂家生产好了辣条之后, 一包就是固定的这么多, 不能变动了.
在这里插入图片描述
C++/Java里面要求一个数组里只能存相同类型的变量
Python里的列表则无限制,放啥类型都可以!!

列表

创建列表

创建列表主要有两种方式. [ ] 表示一个空的列表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

访问下标

可以通过下标访问操作符 [ ] 来获取到列表中的任意元素.
我们把 [ ] 中填写的数字, 称为 下标 或者 索引 .
在这里插入图片描述
在这里插入图片描述

切片操作

通过下标操作是一次取出里面第一个元素.
通过切片, 则是一次取出一组连续的元素, 相当于得到一个子列表

使用 [ : ] 的方式进行切片操作.

在这里插入图片描述

切片操作中可以省略前后边界

在这里插入图片描述

切片操作还可以指定 “步长” , 也就是 “每访问一个元素后, 下标自增几步”

在这里插入图片描述
如果切片中填写的数字越界了, 不会有负面效果. 只会尽可能的把满足条件的元素过去到.
在这里插入图片描述

遍历列表元素

在这里插入图片描述
在这里插入图片描述

新增元素

使用 append 方法, 向列表末尾插入一个元素(尾插).
在这里插入图片描述
使用 insert 方法, 向任意位置插入一个元素
insert 第一个参数表示要插入元素的下标.

在这里插入图片描述
在这里插入图片描述

查找元素

使用 in 操作符, 判定元素是否在列表中存在. 返回值是布尔类型.

alist = [1, 2, 3, 4]
print(2 in alist)
print(10 in alist)

使用 index 方法, 查找元素在列表中的下标. 返回值是一个整数. 如果元素不存在, 则会抛出异常.

alist = [1, 2, 3, 4]
print(alist.index(2))
print(alist.index(10))

在这里插入图片描述

删除元素

使用 pop 方法删除最末尾元素
在这里插入图片描述
pop 也能按照下标来删除元素
在这里插入图片描述
使用 remove 方法, 按照值删除元素.
在这里插入图片描述

连接列表

使用 + 能够把两个列表拼接在一起.

此处的 + 结果会生成一个新的列表. 而不会影响到旧列表的内容.

在这里插入图片描述
使用 extend 方法, 相当于把一个列表拼接到另一个列表的后面.

a.extend(b) , 是把 b 中的内容拼接到 a 的末尾. 不会修改 b, 但是会修改 a.

在这里插入图片描述
None非常类似于C里面的NULL,或者Java里的 null
在这里插入图片描述

元组

元组的功能和列表相比, 基本是一致的.
元组使用 ( ) 来表示.
在这里插入图片描述
元组不能修改里面的元素, 列表则可以修改里面的元素
在这里插入图片描述
在这里插入图片描述
另外, 元组在 Python 中很多时候是默认的集合类型. 例如, 当一个函数返回多个值的时候.
在这里插入图片描述
此处的 result 的类型, 其实是元组.

问题来了, 既然已经有了列表, 为啥还需要有元组?

  1. 元组相比于列表来说, 优势有两方面:
    协同开发的时候,一个程序猿A实现一些功能,提供给程序猿B来使用
    A写好一些函数,让B去调用(函数肯定要传参)
    B传完参数后,A的函数里面是否会将参数的内容进行修改呢?
    如果使用的元组作为参数,就可以避免这样的纠结
  2. 后面学习的字典, 是一个键值对结构.
    要求字典的键必须是 “可hash对象” (字典本质上也是一个hash表).
    而一个可hash对象的前提就是不可变. 因此元组可以作为字典的键, 但是列表不行.

小结

列表和元组都是日常开发最常用到的类型. 最核心的操作就是根据 [ ] 来按下标操作.
在需要表示一个 “序列” 的场景下, 就可以考虑使用列表和元组.
如果元素不需要改变, 则优先考虑元组.
如果元素需要改变, 则优先考虑列表.

字典

字典是什么

字典是一种存储 键值对 的结构.
那么什么是键值对呢? — 这是计算机/生活中一个非常广泛使用的概念.
将 键(key) 和 值(value) 进行一个一对一的映射, 然后就可以根据键, 快速找到值.

举个栗子, 学校的每个同学, 都会有一个唯一的学号.
知道了学号, 就能确定这个同学.
此处 “学号” 就是 “键”, 这个 “同学” 就是 “值”

在Python的字典中,可以同时包含很多个键值对.同时要求这些键,不能重复!

创建字典

创建一个空的字典. 使用 { } 表示字典.
可以在创建的同时指定初始值
键值对之间使用 , 分割, 键和值之间使用 : 分割. (冒号后面推荐加一个空格).
使用 print 来打印字典内容
在这里插入图片描述在这里插入图片描述

查找 key

使用 in 可以判定 key 是否在 字典 中存在. 返回布尔值.
在这里插入图片描述
使用 [ ] 通过类似于取下标的方式, 获取到元素的值. 只不过此处的 “下标” 是 key. (可能是整数, 也可能是字符串等其他类型).
在这里插入图片描述
在这里插入图片描述

新增/修改元素

在这里插入图片描述

删除元素

使用 pop 方法根据 key 删除对应的键值对.
在这里插入图片描述

遍历字典元素

在这里插入图片描述
遍历指的就是能够把一个可迭代对象,将其中包含的元素依次取出,并进行一些操作(整个过程要求不重不漏)
字典被设计出来的初衷,不是为了实现遍历,而是为了增删改查.
字典是哈希表,进行增删改查操作,效率都非常高
而字典的遍历则效率就要差一些.
哈希表这个结构 设计的非常巧妙
能够以“常数级”时间复杂度来完成增删改查
(如果学了一场数据结构,还不知道哈希表,只能说明数据结构并没有掌握)
数据结构中最最重要的就是哈希表,没有之一(工作中最常用到的数据结构,也是面试中非常高频的问题)
无论字典中有多少元素 新增,修改,查找,删除操作都是固定时间,不会因为元素过多,操作速度下降(都是常数级)
字典中的key要求不能重复

取出所有 key 和 value

在这里插入图片描述

在C++或者Java中,哈希表里面的键值对存储的顺序,是无序的
但是在Python 中不一样 Python 中做了特殊处理能够保证遍历出来的顺序,就是和插入的顺序一致的
Python中的字典并不是单纯的哈希表

合法的 key 类型

不是所有的类型都可以作为字典的 key.
字典本质上是一个 哈希表, 哈希表的 key 要求是 “可哈希的”, 也就是可以计算出一个哈希值.
可以使用 hash 函数计算某个对象的哈希值.
但凡能够计算出哈希值的类型, 都可以作为字典的 key.

在这里插入图片描述
不可变的对象,一般就是可哈希的.
可变的对象,一般就是不可哈希的

小结

字典也是一个常用的结构. 字典的所有操作都是围绕 key 来展开的.
需要表示 “键值对映射” 这种场景时就可以考虑使用字典.
字典,列表,元组Python 中非常常用的内置类型 相比于int, str, float…它们内部可以再包含其他元素了(容器/集合类)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/437984.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP - 采购价格确定 ③ 抬头条件和组条件

抬头条件和组条件 当我们创建一个具有多个行项目的采购订单时,我们经常需要条件可以应用到所有的行项目中。相应的,条件也可以应用到特定的行项目。在R/3系统中,条件可以涉及采购凭证的单个行项目(项目条件),多个行项目(组条件)或所有的行项目(抬头条件)。 一些标准…

day14_异常

今日内容 零、 复习昨日 一、日期类 二、异常 零、 复习昨日 1为什么要重写toString Object类toString返回的是对象名字地址,无意义子类重写toString() 返回的对象属性内容 2为什么要重写equals Object类equals判断是对象的地址值是否相等,无意义子类重写equals,为了判断对象的…

贪心算法详解及机器人运动应用Demo

一、引言 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法在有最优子结构的问题中尤为有效。今天,我们将通过一个机器人运动的Demo来详细解析贪心算…

Vision Transformer结构解析

Vision Transformer结构解析 ViT简介ViT三大模块ViT图像预处理模块——PatchEmbed多层Transformer Encoder模块MLP(FFN)模块 基本的Transformer模块Vision Transformer类的实现Transformer知识点 ViT简介 Vision Transformer。transformer于2017年的Att…

【计算机考研】考408,还是不考408性价比高?

首先综合考虑,如果其他科目并不是很优秀,需要我们花一定的时间去复习,408的性价比就不高,各个科目的时间互相挤压,如果备考时间不充裕,考虑其他专业课也未尝不可。 复习408本来就是费力不讨好的事情 不同…

支小蜜校园防欺凌报警系统如何识别霸凌

校园霸凌给受害者带来了深重的心理和身体伤害。为了有效应对这一问题,校园防欺凌报警系统应运而生,其核心技术在于如何准确、迅速地识别霸凌行为。那么校园防欺凌报警系统是如何识别霸凌的呢? 图像识别技术 这些系统利用高清摄像头捕捉校园…

洛谷P2233 公交车路线

本题题号特殊,相对简单。 题目描述 在长沙城新建的环城公路上一共有 88 个公交站,分别为 A、B、C、D、E、F、G、H。公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另外一个公交站往往要换几次车,例如从公交站…

【uni-app小程序开发】实现一个背景色渐变的滑动条slider

最近做的一个用uni-app+vue2开发的微信小程序项目中要实现一个滑动进度控制条,如下图所示: 1. 滑动条需要渐变背景色 2. 滑块的背景色需要与当前位置滑动条的背景色一致(动态改变) 碰到这样的需求,我当然先是看看官方提供的slider组件和uView里的u-slider组件能不能满足…

网络学习:Vlan基础知识、划分思路及其优越性

目录 一、VLAN基础知识 二、VLAN的划分方法 1. 基于端口划分的VLAN 2. 基于MAC地址划分VLAN 3. 基于网络层协议划分VLAN 4. 根据IP组播划分VLAN 5. 按策略划分VLAN 6. 按用户定义、非用户授权划分VLAN 三、VLAN的优越性 1. 增加了网络连接的灵活性 2. 控制网络上的广…

根据标准化开发流程---解析LIN总线脉冲唤醒的测试方法和用例设计思路

前言:本文从标准化开发流程的角度,以LIN总线脉冲唤醒为切入点。从测试工程师的角度来讲测试工作应当如何展开(结合我干测试总结出来的测试经验)。希望大家都能从中有收获!!谢谢!! 1…

进程:守护进程

一、守护进程的概念 守护进程是脱离于终端控制,且运行在后端的进程。(孤儿进程)守护进程不会将信息显示在任何终端上影响前端的操作,也不会被终端产生的任何信息打断,例如(ctrlc).守护进程独立…

Endnote 参考文献 序号对齐

问题描述:想要Engnote插入的参考文献需要后自动对齐,不需要悬挂缩进,悬挂缩进会导致中文和英文文献也对不齐,还有就是参考文献序号从9变成10的时候也会导致文献无法对其。 解决办法: 打开Enfdnote,点击Too…

配置nvm管理nodejs版本的环境详细教程【window版】

nvm( node.js version management) 是 Windows 系统下的一个 Node.js 版本管理工具,它是 Node Version Manager(nvm)的 Windows 版本,它是基于GO语言开发的工具。该工具允许你在 Windows 系统上轻松地安装、切换和管理多个 Node.j…

网络编程套接字(1)—网络编程基础

目录 一、为什么需要网络编程? 二、什么是网络编程 三、网络编程中的基本概念 1、发送端和接收端 2、请求和响应 3、客户端和服务端 四、常见的客户端服务端模型 1、一问一答模型 2、一问多答模型 3、多问一答模型 4、多问多答模型 一、为什么需要网络编程? 为什么…

腾讯云学生服务器申请入口、续费优惠价格和常见问题解答

2024年腾讯云学生服务器优惠活动「云校园」,学生服务器优惠价格:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年,CVM云服务器2核4G配置842.4元一年&…

好书安利:《大模型应用开发极简入门:基于GPT-4和ChatGPT》这本书太好了!150页就能让你上手大模型应用开发

文章目录 前言一、ChatGPT 出现,一切都变得不一样了二、蛇尾书特色三、蛇尾书思维导图四、作译者简介五、业内专家书评总结 前言 ​如果问个问题:有哪些产品曾经创造了伟大的奇迹?ChatGPT 应该会当之无愧入选。仅仅发布 5 天,Chat…

Web自动化测试—webdriver的环境配置

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

YOLOv9电动车头盔佩戴检测,详细讲解模型训练

向AI转型的程序员都关注了这个号👇👇👇 一、YOLOv9简介 YOLOv9是YOLO系列算法的最新版本。YOLO系列算法自2015年首次提出以来,已经在目标检测领域取得了显著的进展,以其快速和准确的特点而广受欢迎。 论文地址&#xf…

9款世界级垂直领域软件架构师Visio平替作图工具!

1 LucidChart 一个基于HTML5的在线流程图绘制和协作应用平台,用户可以通过它方便快速的实现流程图表的绘制,同时还可以实现与他人进行实时的流程图绘制和修改功能,对需要群组协作功能的团队来说,这点非常方便。 由于LucidChart是…

消息队列-Kafka-如何进行顺序消费

全局有序 只有 1 个分区,那这个时候就是能够保证消息的顺序消费。 分区有序 如果我们还是想同时消费多个分区并且保证有序,这个时候我们需要将需要保证顺序的消息路由到同一个分区。 在发送消息的时候我们可以看到: 上面的代码定义了消息…