【Python】基本语法 4 (列表和元组)

news2024/11/18 1:41:47

列表和元组

  • 1. 列表是什么,元组是什么
  • 2. 创建列表
  • 3. 访问下标
  • 4. 切片操作
  • 5. 遍历列表元素
  • 6. 新增元素
  • 7. 查找元素
  • 8. 删除元素
  • 9. 连接元素
  • 10. 关于元组

1. 列表是什么,元组是什么

在编程中,变量就是内存空间,用来表示/存储数据。
如果表示的数据少,直接定义几个变量就可以了。如果表示的数据比较多,这个时候就需要用到列表和元组。
在 Python 中,列表和元组就可以用一个变量来表示很多个数据。

列表和元组,大部分功能都是差不多的,但是有一个功能是非常明显的区别:

  • 列表是可变的:创建好之后,随时能改。
  • 元组是不可变的:创建好之后,改不了,要想改,只能丢弃旧的,搞个新的。

2. 创建列表

  • 创建列表主要有两种方式 [ ] 表示一个空表
# 1. 直接使用字面值来创建列表
a = []
print(type(a))

# 2. 使用 list() 来创建列表
b = list()
print(type(b))

在这里插入图片描述

  • 可以在创建列表的时候,在 [ ] 中指定列表的初始值,元组之间用 , 来分隔
a = [1, 2, 3, 4]
print(a)

在这里插入图片描述

  • 列表中存放的元素允许是不同的类型
a = [1, 'hello', True, [4, 5, 6, 7]]
print(a)

在这里插入图片描述

3. 访问下标

通过下标访问操作符 [ ] 来获取到列表中的任意元素。
把 [ ] 中填写的数字,称为下标 或者索引

  • 使用下标访问元素列表
a = [1, 2, 3, 4]
print(a[2])

在这里插入图片描述
注意:下标是从 0 开始计算的。因此下标为 2 对于的元素是3.

  • 通过下标不光能读取元素内容, 还能修改元素的值
a = [1, 2, 3, 4]
a[2] = 100
print(a[2])

在这里插入图片描述

  • 如果下标超出有效范围,会抛出异常
    由于下标是从 0 开始计算的,对于列表来说,下标的有效范围是从0到长度 -1。
a = [1, 2, 3, 4]
print(a[100])

在这里插入图片描述

  • 可以使用内建函数 len 函数求取到列表的长度(元素个数),和字符串类似。
a = [1, 2, 3, 4]
print(len(a))

在这里插入图片描述

  • Python 中的下标还可以写成负数
    例如:写成 -1 其实等价于 len(a) -1
    -1 就是倒数第一个元素
a = [1, 2, 3, 4]
print(a[len(a)-1])
print(a[-1])

在这里插入图片描述

4. 切片操作

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

  • 使用 [ : ] 的方式进行期望片操作
a = [1, 2, 3, 4]
print(a[1:3])

在这里插入图片描述

  • 切片操作中,[ ] 里面有两个数字,表示了一段区间。1 表示区间开始的下标;3表示区间结束的下标。
  • a[1:3] 中的 1:3 表示的是 [1, 3) 这样的由下标构成的前闭后开区间
    也就是从下标为 1 的元素开始(2), 到下标为 3 的元素结束(4), 但是不包含下标为 3 的元素.所以最终结果只有 2, 3
  • 切片操作中可以省略前后边界
a = [1, 2, 3, 4]

# 省略后边界,表示从开始位置,一直获取到整个列表结束
print(a[1:])

# 省略前边界,表示从列表中的 0 号元素开始获取,一直到结束的边界
print(a[:2])

# 此处切片中的下标也可以写成负数
print(a[:-1])

# 省略边界的两边,表示获取到整个列表
print(a[:])

在这里插入图片描述

  • 切片操作还可以指定 “步长” , 也就是 "每访问一个元素后, 下标自增几步
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[::1])
print(a[::2])
print(a[::3])
print(a[::5])

在这里插入图片描述

  • 切片操作指定的步长还可以是负数, 此时是从后往前进行取元素。 表示 "每访问一个元素之后, 下标自减几步。
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[::-1])
print(a[::-2])
print(a[::-3])
print(a[::-5])

在这里插入图片描述

  • 当切片中的范围超出有效下标后,不会出现异常。而是尽可能的把符合要求的元素给获取到。
a = [1, 2, 3, 4]
print(a[1:100])

在这里插入图片描述

5. 遍历列表元素

“遍历” 指的是把一个列表里的每个元素都依次的取出来,再分别进行处理。遍历需搭配循环。

  • 使用 for 循环遍历列表
a = [1, 2, 3, 4]
for elem in a:
    print(elem)

在这里插入图片描述

在遍历的过程中,循环里面写的不一定是打印也可以是别的操作。
elem 就代表了列表里的每个元素。elem 是 element 这个单词的缩写。

  • ** 使用 for 循环遍历,按照范围生成下标,按下标访问**
a = [1, 2, 3, 4]
for i in range(0, len(a)):
   print(a[i])
  • 使用 while 循环,通过下标遍历
a = [1, 2, 3, 4]
i = 0
while i < len(a):
   print(a[i])
   i += 1

6. 新增元素

  • 使用 append 方法,往列表末尾插入一个新增元素(尾插)
a = [1, 2, 3, 4]
a.append(5)
a.append('hello')
print(a)

在这里插入图片描述

此处的 append 是搭配列表对象 a 一起使用的,而不是作为一个独立的函数。
type,print,input,len,自定义函数等等都是独立函数。
像 append 这种要搭配对象来使用的"函数"(funtion), 也叫做"方法"(menthod)。在 Python 中对象可以视为变量。

  • 使用 insert 方法,往列表任意位置插入一个新增元素
    insert 第一个参数表示要插入元素的下标
a = [1, 2, 3, 4]
a.insert(1, 'hello')
print(a)

在这里插入图片描述

  • 如果 insert 方法 插入位置的下标越界访问了,则会直接插入在列表的末尾
a = [1, 2, 3, 4]
a.insert(100, 'hello')
print(a)

在这里插入图片描述

7. 查找元素

  • 使用 in 操作符,判定元素是否在列表中存在。返回值是布尔类型
    not in 是 in 的反操作
a = [1, 2, 3, 4]
print(1 in a)
print(10 in a)
print(1 not in a)
print(10 not in a)

在这里插入图片描述

  • 使用 index 方法,查找元素在列表中的下标. 返回值是一个整数. 如果元素不存在, 则会抛出异常
a = [1, 2, 3, 4]
print(a.index(2))
print(a.index(10))

在这里插入图片描述

8. 删除元素

  • 使用 pop 删除列表最末尾的元素
a = [1, 2, 3, 4]
a.pop()
print(a)

在这里插入图片描述

  • 使用 pop还能删除任意位置的元素,pop 的参数可以传一个下标过去
a = [1, 2, 3, 4]
a.pop(2)
print(a)

在这里插入图片描述

  • 使用 remove 方法,按照值来进行删除元素
a = ['aa', 'bb', 'cc', 'dd']
a.remove('cc')
print(a)

在这里插入图片描述

9. 连接元素

  • 使用 + 能够把两个列表拼接在一起
    使用 + 拼接列表的结果会生成一个新的列表,而不会影响旧列表的内容。
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
print(a + b)
print(b + a)

在这里插入图片描述

  • 使用 extend 方法,来进行拼接。这个拼接是把后一个列表的内容拼接到前一个列表的后面。
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
c = a.extend(b)
print(a)
print(b)
print(c)

在这里插入图片描述
None 这是一个特殊的变量值,表示“啥都没有”。
extend 方法,其实是没有返回值的。这里是拿一个变量来接收一个没有返回值的方法的返回值,所以是None。

  • 使用 += 来进行拼接
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
a += b
print(a)
print(b)

在这里插入图片描述

  • a += b 等价于 a = a + b
  • a.extend(b) 则是直接把 b 的内容拼接到了 a 的后面
  • 对比于 a.extend(b) ,a += b 多了三步操作:
  1. 构造新的大列表
  2. 把大列表的值赋给 a 列表
  3. 把 a 列表中旧的值释放

10. 关于元组

元组的功能和列表相比,基本是一致的。
元组使用 ( ) 来表示

a = ()
b = tuple()
print(type(a))
print(type(b))

在这里插入图片描述

元组不能修改里面的元素,列表则可以修改里面的元素

  • 因此, 像读操作,比如访问下标, 切片, 遍历, in, index, + 等, 元组也是一样支持的.
  • 但是, 像写操作, 比如修改元素, 新增元素, 删除元素, extend 等, 元组则不能支持

例如:修改元组元素,程序会报错

a = (1, 2, 3, 4)
a[0] = 100

在这里插入图片描述

另外, 元组在 Python 中很多时候是默认的集合类型.。
例如, 当一个函数返回多个值的时候。

def getPoint():
   return 10, 20


result = getPoint()
print(type(result))

在这里插入图片描述
此处的 result 的类型,其实是元组。

既然已经有了列表, 为啥还需要有元组?
元组相比于列表来说, 优势有两方面:

  • 你有一个列表, 现在需要调用一个函数进行一些处理。 但是你有不是特别确认这个函数是否会把你的列表数据弄乱,那么这时候传一个元组就安全很多。
  • 接下来要讲的字典,,是一个键值对结构。 要求字典的键必须是 “可hash对象” (字典本质上也是一个hash表).。而一个可hash对象的前提就是不可变. 因此元组可以作为字典的键, 但是列表不行。

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

本章到这里就结束啦,如果有哪里写的不好的地方,请指正。
如果觉得不错并且对你有帮助的话请给个三连支持一下吧!
Fighting!!!✊

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java之注解的定义和使用

初识注解&#xff1a; 注解的概念&#xff1a; 注解是从JDK5.0开始引入的新技术&#xff0c;它不是程序本身&#xff0c;但是和注释有相同的作用&#xff0c;都能够对程序做出一定的解释&#xff0c;并且注解能够被其他编译器所读取 注解的格式&#xff1a; 注解是以“注释…

代码随想录训练营第43天|LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474.一和零

参考 代码随想录 题目一&#xff1a;LeetCode 1049. 最后一块石头的重量 II 这个题和之前的“416 分割等和子集”非常的类似&#xff0c;如果给出的stones[]数组能被分成相等的两个数组&#xff0c;那么剩余石头的最小重量就是0。求解思路和分割等和子集一样&#xff0c;只是…

前端工程化实践——javaScript 手写rollup

webpack打包非常繁琐&#xff0c;打包体积较大。rollup主要打包js库。vue/react/angular都在用rollup作为打包工具。 rollup项目初体验 新增文件夹rollupTest 初始化项目&#xff1a;npm init -y 安装依赖 npm install rollup -D 修改配置文件package.json {"name&q…

Python模块fileinput操作文件和目录操作总结

前言 之前介绍Python的 pathlib 模块可以有效的路径及文件查找等方便操作&#xff0c;本篇介绍一个相对 readlines() 获取文件内容更高效的用法 fileinput模块 对一个或者多个文件的内容迭代遍历&#xff08;类似文件操作的readlines()&#xff09;,但是返回的是迭代对象&…

ffmpeg库编译安装及入门指南(Windows篇)- 2022年底钜献

最近项目需要&#xff0c;使用了 ffmpeg 做摄像头视频采集和串流。这几天有点时间&#xff0c;打算把相关的一些知识记录分享一下。 在撰写本文时&#xff0c;我又在另外一台电脑上把 ffmpeg 重新安装了一遍&#xff0c;所以绝对真实靠谱&#xff01;如果你觉得文章写得还不错…

MAC QT OpenGL 波浪特效

目录 一.MAC QT OpenGL 波浪特效效果演示 1.原始图片2.效果演示 二.MAC QT OpenGL 波浪特效源码下载三.其他平台波浪特效版本 1.IOS 演示效果2.Windows OpenGL ES 演示效果3.Windows OpenGL 演示效果 四.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >>…

安装微信开发者工具及创建小程序

大纲&#xff1a; 一、官网&#xff1a;微信公众平台微信公众平台&#xff0c;给个人、企业和组织提供业务服务与用户管理能力的全新服务平台。https://mp.weixin.qq.com/ 开发者工具下载页面https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html《开发者…

【教学类-22-02】20221210《八款字体的描字帖-4*4格整张-不用订书机》(大班主题《我是中国人-中国字》)

成品样式&#xff1a; 48号字&#xff08;适应2-3个名字的大小&#xff09; 44号字&#xff08;适应4个名字大小&#xff08;2-3个名字也可以用&#xff0c;字会稍微小&#xff09;&#xff09; 打印样式&#xff1a; 背景需求&#xff1a; 观摩中3班做“描花体字”的本子的情…

【前沿技术RPA】 一文了解 UiPath 状态机 State Machine

&#x1f40b;作者简介&#xff1a;博主是一位.Net开发者&#xff0c;同时也是RPA和低代码平台的践行者。 &#x1f42c;个人主页&#xff1a;会敲键盘的肘子 &#x1f430;系列专栏&#xff1a;UiPath &#x1f980;专栏简介&#xff1a;UiPath在传统的RPA&#xff08;Robotic…

【流量回放探索】啄木鸟流量回放平台

啄木鸟流量回放平台 项目简介 本项目是基于RuoYi-Vue单应用版本流量回放引擎基于goreplay演示系统基于newbee-mall-api-go 如果你想从录制开始体验&#xff0c;需要搭建演示系统newbee-mall-api-go &#xff0c;同时需要将gor 部署在演示系统服务中&#xff0c;搭建kafka以便…

[附源码]Python计算机毕业设计SSM基于技术的高校学生勤工俭学管理系统的设计与开发(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

HBase

1 HBase存储结构 HMaster 1. 监控 RegionServer   2. 处理 RegionServer 故障转移   3. 处理元数据的变更   4. 处理 region 的分配或移除   5. 在空闲时间进行数据的负载均衡   6. 通过 Zookeeper 发布自己的位置给客户端 RegionServer 1. 负责存储 HBase 的实际数…

编写高质量代码 - 多线程和并发(2)

文章目录1. 使用线程异常处理器提升系统可靠性2. volatile不能保证数据同步3. 异步运算考虑使用Callable接口1. 使用线程异常处理器提升系统可靠性 我们要编写一个Socket应用&#xff0c;监听指定端口&#xff0c;实现数据包的接收和发送逻辑&#xff0c;这在早期系统间进行数据…

分布式计算MapReduce究竟是怎么一回事?

前言 如果要对文件中的内容进行统计&#xff0c;大家觉得怎么做呢&#xff1f;一般的思路都是将不同地方的文件数据读取到内存中&#xff0c;最后集中进行统计。如果数据量少还好&#xff0c;但是面对海量数据、大数据的场景这样真的合适吗&#xff1f;不合适的话&#xff0c;…

1560_AURIX_TC275_NMI Trap以及PMC

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 1. 连同上一次的笔记中最后一页&#xff0c;看得出来NMI的trap软件触发至少是有三种方法。 2. 后半页给出了trap发生的状态的清除操作寄存器。 前面的文字描述部分&#xff0c;几个trap是…

基于jsp+mysql+ssm公共交通失信人员管理系统-计算机毕业设计

项目介绍 本南昌公共交通失信人员管理系统主要包括系统用户管理模块、用户信息管理模块、处罚类型管理、失信人员管理、登录模块、和退出模块等多个模块, 本系统基于SSM(SpringSpringMVCMyBatis)框架,适用于毕业设计&#xff0c;采用javaweb,基于B/S模式,Myeclipse或者eclipse…

手把手教你---猿如意之八大高效利器使用

开篇之前我们可能要来了解一下&#xff0c;《猿如意》是CSDN为提高开发者工作效率&#xff0c;发布客户端和低代码平台产品——《猿如意》&#xff1b;记得第一次在接触猿如意实在今年八月份&#xff0c;之前使用过其他的工具&#xff0c;但是有利有弊&#xff0c;先说下为啥选…

趋势分析 | 零信任实践之关键技术解读

SmartX 趋势分享 SmartX 趋势分享由 SmartX 团队内部分享的权威机构市场报告、全球重要媒体文章精选整理而成。内容涉及现代数据中心相关产业趋势以及金融、医疗、制造等行业全球用户需求与实践前沿洞察。本期&#xff0c;我们分享一篇 Gartner 关于零信任实践策略的文章[1]&am…

[附源码]JAVA毕业设计校园快递联盟系统(系统+LW)

[附源码]JAVA毕业设计校园快递联盟系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

【大数据入门核心技术-Azkaban】(二)Azkaban核心架构

目录 一、核心架构 1、Relational Database(Mysql) 2、Azkaban Web Server 3、Azkaban Executor Server 二、三种运行模式 1、solo server mode 2、two server mode 3、multiple executor mode 一、核心架构 Azkaban架构由三部分构成&#xff1a; 1、Relational Databa…