Python中的列表

news2025/1/6 18:23:00

1.创建列表

使用中括号把要添加的元素括起来,不同元素用逗号隔开。

>>> rhyme = [1, 2, 3, 4, 5, "上山打老虎"]
>>> print(rhyme)
[1, 2, 3, 4, 5, '上山打老虎']

2.访问列表中的元素

(1)希望顺序访问列表中的元素:使用for语句

>>> for each in rhyme:
...     print(each)
...
1
2
3
4
5
上山打老虎

(2)希望访问特定元素:使用下标的方法

>>> rhyme[0]
1
>>> rhyme[2]
3
>>> rhyme[5]
'上山打老虎'

3.Python中的下标索引

和C语言类似,从前往后是从0开始一直到最后
在这里插入图片描述
特殊的是,从后往前,是从-1开始索引的

在这里插入图片描述

4.列表切片

rhyme[1,2,3,4,5,6]

切片方式——rhyme[a : b : c]
切片参数的描述:
(1)首先参数都必须是整数;
(2)其次,a表示从下标为a的元素开始(包含下标为a的元素),b表示到下标为b的元素结束(不包含下标为b的元素),c表示下标跳转的增加的量。
(3)注意:abc三个参数不一定都需要存在;thyme[:]表示寻找整个列表的元素;thyme[::2]表示从下标为0的元素开始,每次跳转2个位移的增加量。

>>> rhyme[0:3]
[1, 2, 3]
>>> rhyme[3:6]
[4, 5, '上山打老虎']
>>> rhyme[:3]
[1, 2, 3]
>>> rhyme[3:]
[4, 5, '上山打老虎']
>>> rhyme[:]
[1, 2, 3, 4, 5, '上山打老虎']
>>> rhyme[0:6:2]
[1, 3, 5]
>>> rhyme[::2]
[1, 3, 5]
>>> rhyme[::-2]
['上山打老虎', 4, 2]
>>> rhyme[::-1]
['上山打老虎', 5, 4, 3, 2, 1]

5.列表的增

(1)对列表末尾追加一个元素,使用append()的方法

>>> heros.append("黑寡妇")
>>> heros
['钢铁侠', '绿巨人', '黑寡妇']

(2)对列表末尾一次性追加多个元素,使用extend()的方法

>>> heros.extend(["鹰眼", "灭霸", "雷神"])
>>> heros
['钢铁侠', '绿巨人', '灭霸', '黑寡妇', '鹰眼', '灭霸', '雷神']

其中extend()的参数必须是可迭代对象——所以必须是一个列表
(3)使用列表切片的方法也可对列表进行元素的增添

>>> s = [1, 2, 3, 4, 5]
>>> # 下面的做法等同于 s.append(6)
>>> s[len(s):] = [6]
>>> s
[1, 2, 3, 4, 5, 6]
>>> # 下面的做法等同于 s.extend([7, 8, 9])
>>> s[len(s):] = [7, 8, 9]
>>> s
[1, 2, 3, 4, 5, 6, 7, 8, 9]

(4)对任意位置的元素进行增添——使用insert()的方法
insert(a,b)有两个参数,a表示要插入元素的位置,b表示要添加的元素

>>> s = [1, 3, 4, 5]
>>> s.insert(1, 2)
>>> s
[1, 2, 3, 4, 5]

6.列表的删

(1)删除特定元素,使用remove()的方法

>>> heros.remove("灭霸")
>>> heros
['钢铁侠', '绿巨人', '黑寡妇', '鹰眼', '灭霸', '雷神']

需要注意两点:

  • 如果列表中存在多个要删除的元素,只会删除靠前的第一个元素;
  • 如果要删除的元素不存在,则程序会报错。

(2)删除特定下标位置的元素,使用pop()的方法
pop()参数就是下标的数

>>> heros.pop(2)
'黑寡妇'
>>> heros
['钢铁侠', '绿巨人', '鹰眼', '灭霸', '雷神']

pop()的参数是可选的,如果没有选择,就会弹出并删除最后一个元素;

>>> heros.pop()
'雷神'
>>> heros
['钢铁侠', '绿巨人', '鹰眼', '灭霸']

(3)清空整个列表,使用clear()

>>> heros.clear()
>>> heros
[]

7.列表的改

列表和字符串最大的区别是,列表是可改的,而字符串是不可改的
替换列表中元素和访问列表中的元素类似,找到要替换的元素后,通过赋值运算来修改
(1)修改特定元素

>>> heros = ['蜘蛛侠', '绿巨人', '黑寡妇', '鹰眼', '灭霸', '雷神']
>>> heros[4] = "钢铁侠"
>>> heros
['蜘蛛侠', '绿巨人', '黑寡妇', '鹰眼', '钢铁侠', '雷神']

(2)连续修改多个元素,使用切片来实现

>>> heros[3:] = ["武松", "林冲", "李逵"]
>>> heros
['蜘蛛侠', '绿巨人', '黑寡妇', '武松', '林冲', '李逵']

8.列表的排序和翻转

排序使用到sort(),翻转使用到reverse()

>>> nums = [3, 1, 9, 6, 8, 3, 5, 3]
>>> nums.sort()
>>> nums
[1, 3, 3, 3, 5, 6, 8, 9]
>>> nums.reverse()
>>> nums
[9, 8, 6, 5, 3, 3, 3, 1]

>>> nums = [3, 1, 9, 6, 8, 3, 5, 3]
>>> nums.sort(reverse=True)
>>> nums
[9, 8, 6, 5, 3, 3, 3, 1]

9.列表中的查

(1)如果希望的到列表中的特定的元素存在几个,使用count()

>>> nums.count(3)
3

表示nums列表中有3个元素为3的数
(2)找特定元素的下标,使用index()

>>> heros.index("绿巨人")
4

注意,返回的是找到第一个元素的下标 ;
index有两个可选的参数,start和end,表示寻找元素下标的范围

>>> nums.index(3, 1, 7)
5

(3)拷贝列表
copy()

>>> nums_copy1 = nums.copy()
>>> nums_copy1
[3, 1, 9, 6, 8, 3, 5, 3]

切片

>>> nums_copy2 = nums[:]
>>> nums_copy2
[3, 1, 9, 6, 8, 3, 5, 3]

这两种切片的方法被Python称为浅拷贝;

10.列表的加法和乘法

(1)列表的加法也是拼接,两个列表相加之后还是列表


>>> s = [1, 2, 3]
>>> t = [4, 5, 6]
>>> s + t
[1, 2, 3, 4, 5, 6]

(2)列表的乘法就是重复几次

>>> s * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

11.列表的嵌套

写法1:

>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

写法2:

>>> matrix = [[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]]

表示的是二位列表

12.访问嵌套列表

(1)for循环进行访问

>>> for i in matrix:
...     for each in i:
...         print(each)
...
1
2
3
4
5
6
7
8
9

(2)下标进行访问

>>> matrix[0]
[1, 2, 3]
>>> matrix[1]
[4, 5, 6]
>>> matrix[2]
[7, 8, 9]
>>> matrix[0][0]
1
>>> matrix[1][1]
5
>>> matrix[2][2]
9

13.使用for循环来创建和初始化二位列表

>>> A = [0] * 3
>>> for i in range(3):
...     A[i] = [0] * 3
...
>>> A
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

高级错误:

A=[[0]*3]*3

14.变量不是盒子

在一些编程语言中,经常会有 “变量就是盒子” 这样的比喻,因为赋值操作就像是往盒子里面放东西。

但在 Python 中变量并不是一个盒子,当赋值运算发生的时候,Python 并不是将数据放进变量里面,而是将变量与数据进行挂钩,这个行为我们称之为引用

15.浅拷贝和深拷贝

浅拷贝:利用列表的 copy() 方法或者切片来实现

深拷贝:利用copy模块的deepcopy()函数来实现

浅拷贝可以用于处理一维列表,对于嵌套列表的拷贝,只能拷贝第一层数据,其余仅拷贝其引用:

>>> x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> y = x.copy()
>>> x[1][1] = 0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> y
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]

浅拷贝的逻辑图如下:
在这里插入图片描述
深拷贝可以处理多维的列表:

>>> x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> y = copy.deepcopy(x)
>>> x[1][1] = 0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> y
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

深拷贝的逻辑图如下:
在这里插入图片描述

16.列表的推导式

列表推导式的优势:使代码变得简洁;程序运行速率高效。

>>> oho = [1, 2, 3, 4, 5]
>>> for i in range(len(oho)):
...     oho[i] = oho[i] * 2

使用列表推导的可写成下面的形式


>>> oho = [1, 2, 3, 4, 5]
>>> oho = [i * 2 for i in oho]

17.列表推导的基本语法

[expression for target in iterable]

18.处理矩阵

利用列表推导式处理矩阵也是非常方便,比如下面代码是将矩阵第 2 列的元素给提取出来:

>>> matrix = [[1, 2, 3],
...           [4, 5, 6],
...           [7, 8, 9]]
>>> col2 = [row[1] for row in matrix]
>>> col2
[2, 5, 8]

又比如,下面代码是获取矩阵主对角线上的元素(就是从左上角到右下角这条对角线上的元素):

>>> diag = [matrix[i][i] for i in range(len(matrix))]
>>> diag
[1, 5, 9]

19.创建二维列表的错误方式

不能这样创建二维列表

>>> B = [[0] * 3] * 3
>>> B
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

因为如果你试图修改其中的一个元素,就会发现有多个元素同时被修改了:

>>> B[1][1] = 1
>>> B
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]

这是因为内部嵌套的列表不是三个独立的列表,而是同一个列表的三次引用而已。
正确的做法是:

>>> A = [0] * 3
>>> for i in range(3):
...     A[i] = [0] * 3
...
>>> A
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> A[1][1] = 1
>>> A
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]

更好的方法:利用列表推导式来创建


>>> S = [[0] * 3 for i in range(3)]
>>> S
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> S[1][1] = 1
>>> S
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]

20.具有条件的列表推导式

列表推导式其实还可以添加一个用于筛选的 if 分句,完整语法如下:

[expression for target in iterable if condition1]

多层嵌套:

[expression for target1 in iterable1
for target2 in iterable2

for targetN in iterableN]

可附加条件:

[expression for target1 in iterable1 if condition1
for target2 in iterable2 if condition2

for targetN in iterableN if conditionN]

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

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

相关文章

博弈论入门

分类 要素 常见博弈 完全信息静态博弈 纳什均衡 囚徒困境 古诺双寡头模型 古诺双寡头模型的条件 市场中有且仅有两家公司策略为同质商品的量,qiq_iqi​边际成本为c,生产成本就为c*q,在这里我们的边际成本是常数。需求曲线:Pa−b∗…

2009-01-从学校毕业步入社会

在一间坐满学生的教室中,台上同学正在对自己毕业答辩项目进行介绍,台下第一排坐着打分的老师,这群人正在进行计算机专业的毕业答辩,台下人群中一个叫刘文轩的同学紧张又期盼的看着前面正在进行答辩的同学,看着同学们优…

react中useReduer和useEffect

相信很多人对于变成中reduce、reducer命名都存在困惑,为了更好理解useRedecuer,我们不妨先来说说reduce。 如何理解reduce和reducer reduce:函数式编程当中的一个术语,reduce操作被称为Fold折叠 // 通过reduce,数组…

公司内部有奖知识答题活动怎么做

公司年会趣味问答、员工业务知识考核、消防安全、党史等知识测试......公司内部的答题活动已经成了众多管理者、HR日常工作中一部分。如何让组织者更轻松、更公平公正地举办答题活动?如何让员工更积极参与呢?试试答题小博士的有奖答题。有奖答题活动形式…

中晶FileScan 3222扫描仪 Code:-206,卡纸或滚筒出错

中晶FileScan 3222是中晶品牌下的一款扫描仪。 型号 3222 产品类型 平板式+馈纸式 扫描光源 LED

机器人中的数值优化之BFGS(convex and smooth)

本文ppt来自深蓝学院《机器人中的数值优化》 目录 1 Why Quasi-Newton Methods 2 Rate of convergence 3 Quasi-Newton Methods 3.1 Quasi-Newton approximation 3.2 preserve descent direction 3.3 secant condition 3.4 iterate B 3.5 Parsed solution B 4 Cont…

微信小程序学习第2天——模板语法与样式,全局配置与页面配置

文章目录一、WXML模板语法1、数据绑定2、事件绑定3、条件渲染4、列表渲染二、WXSS模板样式rpximport语法导入样式全局和局部样式三、全局配置全局配置文件及常用配置项windowtabBar四、页面配置一、WXML模板语法 1、数据绑定 数据绑定的原则:①在data中定义数据 ②…

亚信安慧携AntDB数据库入选信通院软件供应链厂商和产品名录

日前,中国信息通讯研究院(简称:中国信通院)在其主办的3SCON软件供应链安全大会上,发布了软件供应链厂商和产品名录。中国信通院云计算与大数据研究所副所长栗蔚表示,我国软件供应链安全发展面临制度体系待完…

微服务组件(高并发带来的问题 服务器雪崩效应 Sentinel入门)

高并发带来的问题 服务器雪崩效应 Sentinel入门高并发带来的问题模拟高并发服务器雪崩效应常见容错方案Sentinel入门(常见的容错组件)什么是Sentinel?订单服务集成Sentinel流控规则预热流控等待流控关联流控链路流控降级(提供一个兜底方案)慢调用比例异常比例异常数案例高并发…

显著图(Saliency map)

这里写目录标题概念应用算法传统算法静态显著性算法:对数光谱(SpectralResidual):静态显著性算法:细粒方法(FineGrained):人工智能算法基于眼动仪预测显著性区域方法积分梯度方法对比…

jsp学生宿舍管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 学生宿舍管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使…

【Vue】Vue的简介和特性

一、Vue简介Vue.js可以说是MVVM架构的最佳实践,是一个JavaScript MVVM库,是一套构建用户界面的渐进式前端框架。专注于MVVM中的ViewModel,不仅做到了数据双向绑定,而且也是一款相对比较轻量级的JS 库,API简洁。1. 构建…

Day 15 SpringBoot Condition

1 Condition作用:该功能可以选择性的创建Bean1.1 验证在Spring的IOC容器中有一个User的 Bean,现要求导入Jedis坐标后,加载该Bean,没导入,则不加载。【第一步】创建User对象Repository Conditional(ClassCondition.clas…

【yolov5系列】yolov5-onnxruntime在Ubuntu和RK芯片上运行

前言 这里yolov5的onnx模型的推理,分别在 x64上 和 移动端上运行,前者在自己本地Ubuntu系统上运行,后者在瑞芯微的rk3566上运行。 要完成如上工作我们需要一下步骤: 1 下载onnxruntime编译好的库2 下载opencv库并安装3 下载交叉编…

88E1548P大流量传输插拔网线导致网络不通

1、测试环境硬件:NXP LS1046A ARM64平台 88E1548P 软件:linux 4.19.26 linux 5.10.35环境说明:88E1548P 是一个QSGMII 的 phy 芯片,LS1046A CPU 提供4个GMAC 与 88E1548P 连接,就是4个千兆网口。2、具体现象eth7发包…

OFDM系统架构梳理(1)

1、ofdm简介OFDM是一种特殊的多载波传输方案,它可以被看作是一种调制技术,也可以被当作一种复用技术。多载波传输把数据流分解成若干子比特流,这样每个子数据流将具有低得多的比特速率,用这样的低比特率形成的低速率多状态符号再去…

Spring Batch 批处理-步骤Step与Tasklet

引言 接着上篇:Spring Batch 批处理-执行上下文,了解作业执行上下文后,本篇就来了解一下Spring Batch批处理步骤Step对象与任务处理对象Tasklet,看下Spring Batch 如何运作的。 步骤介绍 一般认为步骤是一个独立功能组件&#…

密码学大咖DavidWong历经数年创作编写而成的这本书

从我开始写本书到图书出版已经有几年了。最初,我打算将本书作为介绍现实世界常用密码原语的图书。但是,这显然是一件不可能完成的事情。任何一个领域都不可能用一本书来总 结清楚。出于这个原因,我必须在知识的深度和广度之间找到平衡。我希望…

3.6双端口RAM和多模块存储器

文章目录关键词正文一、存取周期二、引子三、双端口RAM四、多体并行存储器&#xff08;1&#xff09;高位交叉编址方式&#xff08;2&#xff09;低位交叉编址方式&#xff08;3&#xff09;编址&#xff08;4&#xff09;特性举例<1> 高位交叉编址<2> 低位交叉编址…

word实用技巧:拼音指南用法及注意事项

如果你是一位语文老师&#xff0c;在为学生准备试卷时&#xff0c;时常会用到Word拼音指南功能&#xff1b;如果你是一位职场白领&#xff0c;在为领导准备发言稿、颁奖名单时&#xff0c;以防领导读错音&#xff0c;也会用到Word拼音指南功能对生僻字&#xff0c;多音字进行单…