四、Python —— 列表
文章目录
- 一、列表的初始化
- 1.1、直接初始化
- 1.2、通过 append 函数初始化
- 1.3、 通过 for 语句初始化列表长度和每个位置的数值
- 二、访问列表元素
- 2.1、越界的含义
- 三、 使用循环语句遍历列表
- 3.1、通过下标遍历
- 3.2、通过 for...in... 直接遍历
- 四、列表的切片操作
- 五、列表的复制
- 六、列表的运算
- 七、列表的常用操作
- 八、嵌套列表 (多维列表)
- 8.1、二维列表的表示
- 8.1、二维列表的输出 (遍历)
- 8.2、二维列表的初始化
- 九、补充
列表实际上就是 C++ 中的数组
一、列表的初始化
列表是一种常见的变量类型,可以存储一列元素。元素的类型可以不同,不过大多数情况下类型是相同的。
列表需要用 方括号括 起来,中间的元素用 逗号隔开,最后一个元素后可以多加一个逗号。
1.1、直接初始化
a = [] # 定义一个空列表
b = [1, 2] # 含有2个整数的列表
c = [6, "python", 3.14] # 含有3个不同类型元素的列表print(a, b, c)
"""output
[] [1, 2] [6, 'python', 3.14]"""
1.2、通过 append 函数初始化
***append()***函数的作用是,在列表末尾添加一个元素。
a = []
for i in range(5): # 初始化[0, 0, 0, 0, 0]a.append(0)
print(a)n = 4
b = []
for i in range(n): # 初始化[0, 1, 4, 9]b.append(i * i)
print(b)
1.3、 通过 for 语句初始化列表长度和每个位置的数值
a = [0 for i in range(5)] # 初始化[0, 0, 0, 0, 0]
print(a)n = 4
b = [i * i for i in range(n)] # 初始化[0, 1, 4, 9]
print(b)
二、访问列表元素
2.1、越界的含义
可以通过下标读/写列表中的元素,下标从 0 开始,也可以是 负数,负数下标表示的是 除以 列表长度的 余数 对应的位置。负数下标相当于将列表首位相接,然后 从 0 往前数。
但是 python 中同样有越界的含义,如果列表长度是 n,那么 下标 只能取 -n~n-1之间的值。
a = [0, 1, 2]
print(a[0], a[1], a[2]) # 读取列表中每个位置的值a[0] = 3 # 给列表中的某个位置写值
print(a)print(a[-1]) # 由于-1 % 3 = 2,所以表示的是a[2]
三、 使用循环语句遍历列表
3.1、通过下标遍历
a = [2, 1, 4, 5, 3]for i in range(5):print(a[i], end=' ')
3.2、通过 for…in… 直接遍历
a = [2, 1, 4, 5, 3]for x in a:print(x, end=' ')
练习:假设斐波那契数列的前两项分别是 a0=0, a1=1, 求 an。
n = int(input())a = [0 for i in range(n + 1)]
a[0] = 1
a[1] = 1for i in range(2, n+1):a[i] = a[i-2] + a[i-1]print(a[n])
四、列表的切片操作
列表的切片操作会返回一个新列表。用法:
a[begin:end]
会返回包含a[begin], a[begin + 1], ..., a[end - 1]
的列表。- 省略
begin
时,begin
的默认值为 0。 - 省略
end
时,end
的默认值为 列表长度。 - 如果
begin
和end
是 负数 时,表示的是%列表长度
。 - 如果
begin > end
,表示切片为 空。
注意:切片这里的 begin 和 end 与 上面列表的下表不同,列表的下标是有 越界 这个概念的,但是切片没有 (也就是说 begin 和 end 的取值范围可以无穷大)。
例如:
a = [0, 1, 2, 3, 4]print(a[1:4]) # 输出[1, 2, 3]
print(a[1:]) # 输出[1, 2, 3, 4]
print(a[:4]) # 输出[0, 1, 2, 3]
print(a[:]) # 输出[0, 1, 2, 3, 4]
print(a[-4:-1]) # 等价于print(a[1:4])
切片也支持 写操作:
a = [0, 1, 2, 3, 4]a[1:4] = [2, 3]
print(a) # 输出[0, 2, 3, 4]
五、列表的复制
列表跟其他变量类型不同,如果 用等号 复制 列表,那么 原列表和新列表 是 同一个列表。对新列表修改,会修改原列表的值。例如:
a = [0, 1, 2, 3, 4]
b = ab[0] = 5
print(a, b) # 会发现a[0]和b[0]都被修改了
"""output
[5, 1, 2, 3, 4] [5, 1, 2, 3, 4]"""
但是,切片并不是拷贝,切片可以得到一个 原列表的 浅拷贝。此时再修改新列表,原列表就 不会发生变化 了。例如:
a = [0, 1, 2, 3, 4]
b = a[:]b[0] = 5
print(a, b) # 会发现a[0]没有被修改
"""output
[0, 1, 2, 3, 4] [5, 1, 2, 3, 4]"""
六、列表的运算
操作 | 效果 |
---|---|
列表 + 列表 | 将两个列表拼接起来,得到一个 新列表 |
列表 * 整数 | 将若干个自身拼接起来,得到一个 新列表 |
加法和乘法的所生成的新列表 c,并不会改变原来都两个列表 a 和 b
a = [0, 1, 2]
b = [3, 4]c = a + b # c相当于a和b的浅拷贝
print(c) # 输出[0, 1, 2, 3, 4]d = a * 3 # d相当于a的浅拷贝
print(d) # 输出[0, 1, 2, 0, 1, 2, 0, 1, 2]a += [3] # 在a的末尾添加一个新元素3
print(a) # 输出[0, 1, 2, 3]
"""output
[0, 1, 2, 3, 4]
[0, 1, 2, 0, 1, 2, 0, 1, 2]
[0, 1, 2, 3]"""
七、列表的常用操作
假设 a
是一个列表,则:
表示 | 操作 |
---|---|
len(a) | 返回列表长度 |
a.append(x) | 在列表末尾添加一个新元素 |
a.pop() | 删除列表的最后一个元素 |
``a.reverse() | 将整个列表翻转 |
a.sort() | 将整个列表从小到大排序 |
例如:
a = [0, 1, 2]print(len(a)) # 输出3a.append(3)
print(a) # 输出[0, 1, 2, 3]a.pop()
print(a) # 将[0, 1, 2, 3]的最后一个数删掉,所以输出[0, 1, 2]a.reverse()
print(a) # 输出[2, 1, 0]a.sort()
print(a) # 输出[0, 1, 2]
八、嵌套列表 (多维列表)
8.1、二维列表的表示
列表中的元素也可以是列表,例如:
matrix = [ # 列表中的元素也可以是列表[0, 1, 2],[3, 4, 5],[6, 7, 8], # 最后一个元素后可以添加逗号
]
8.1、二维列表的输出 (遍历)
二维列表的输出关键就在于找到 下标 和 元素 的对应关系。下面给出两种输出方式 (遍历方式):
matrix[1][0] = 99 # 修改嵌套列表中元素的值
print(matrix[1][0]) # 读取嵌套列表中元素的值"""先输出行再输出列"""
for i in range(len(matrix)): # 循环打印整个矩阵for j in range(len(matrix[i])):print(matrix[i][j], end=' ')print() # 在行末输出回车for row in matrix: # 循环打印整个矩阵for x in row:print(x, end=' ')print() # 在行末输出回车"""先输出列再输出行"""
for j in range(len(matrix[0])):for i in range(len(matrix):print(matrix[i][j], end = " ")print()
8.2、二维列表的初始化
方法一:采用 append()
函数初始化:
matrix = []for i in range(3):row = []for j in range(3):row.append(i * 3 + j)matrix.append(row)print(matrix)
方法二:采用 for
语句直接初始化:
matrix = [[i * 3 + j for j in range(3)] for i in range(3)]
print(matrix)
"""output
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]"""
九、补充
- 当需要读入一行 整数 时,可以用
a = list(map(int, input().split()))
。类似地,当需要读入一行 浮点数 时,可以用a = list(map(float, input().split()))
。 a[::-1]
可以返回一个 逆序的 新列表。
相关文章:
四、Python —— 列表
文章目录 一、列表的初始化1.1、直接初始化1.2、通过 append 函数初始化1.3、 通过 for 语句初始化列表长度和每个位置的数值 二、访问列表元素2.1、越界的含义 三、 使用循环语句遍历列表3.1、通过下标遍历3.2、通过 for...in... 直接遍历 四、列表的切片操作五、列表的复制六…...

Paper -- 建筑高度估计 -- 基于街景图像和深度学习的城区建筑高度计算
基本信息 论文题目: Building height calculation for an urban area based on street view images and deep learning 中文题目: 基于街景图像和深度学习的城区建筑高度计算 作者及单位: – Zhen Xu Furong Zhang Yingying Wu Yajun Yang Yuan Wu – 北京科技大学城市与安全研…...

机器学习周志华学习笔记-第6章<支持向量机>
机器学习周志华学习笔记-第6章<支持向量机> 卷王,请看目录 6支持向量机6.1 函数间隔与几何间隔6.1.1 函数间隔6.1.2 几何间隔 6.2 最大间隔与支持向量6.3 对偶问题6.4 核函数6.5 软间隔支持向量机6.6 支持向量机6.7核方法 6支持向量机 支持向量机是一种经典…...

第三届航空航天与控制工程国际 (ICoACE 2024)
重要信息 会议官网:www.icoace.com 线下召开:2024年11月29日-12月1日 会议地点:陕西西安理工大学金花校区 (西安市金花南路5号) 大会简介 2024年第三届航空航天与控制工程国际学术会议(ICoACE 2024&a…...

【大数据技术基础】 课程 第8章 数据仓库Hive的安装和使用 大数据基础编程、实验和案例教程(第2版)
第8章 数据仓库Hive的安装和使用 8.1 Hive的安装 8.1.1 下载安装文件 访问Hive官网(http://www.apache.org/dyn/closer.cgi/hive/)下载安装文件apache-hive-3.1.2-bin.tar.gz 下载完安装文件以后,需要对文件进行解压。按照Linux系统使用的…...

BERT 详解
BERT简介 BERT(Bidirectional Encoder Representations from Transformers)是由 Google 在 2018 年提出的一种预训练语言模型。BERT 在自然语言处理(NLP)领域取得了重大突破,因为它能够有效地捕捉文本的上下文信息&am…...
使用 MySQL 的 REPLACE() 函数轻松替换表中字段
前言 在数据库操作中,经常需要对存储的数据进行一些处理和修改,替换字段中的部分信息。MySQL 提供了多种字符串函数来帮助开发者完成这些任务。其中一个非常实用的函数就是 REPLACE()。 REPLACE() 函数简介 REPLACE() 函数用于在字符串中查找指定的子…...
Http 响应协议
HTTP的响应协议 响应数据格式 响应行 响应数据的第一行,包括协议、状态码、描述 响应头 从响应数据格式的第二行开始,也是以key:value的格式 响应体 和响应头之间有一个空行,是响应数据格式的最后一部分,用于存放响应的数据 常见响…...

TCP/IP 协议:网络世界的基石(2/10)
一、引言 在当今数字化时代,互联网已经成为人们生活中不可或缺的一部分。而在互联网的背后,TCP/IP 协议扮演着至关重要的角色,堪称互联网的基石。 TCP/IP 协议是一组用于数据通信的协议集合,它的名字来源于其中最重要的两个协议…...
Lua--1.基础知识
Lua基础知识 变量简单的4种变量类型复杂的4种变量类型type函数 字符串操作长度获取--#多行打印字符串拼接别的类型转字符串-- tostring()字符串提供的公共方法 运算符算术运算符-- - * / % ^条件运算符-- > < > < ~(不等于 是 ~)逻辑运算符-- and or not位运算、…...
【GPT】力量训练的底层原理?
详细解读力量训练的每一个底层原理 力量训练之所以有效,是因为它利用了肌肉、神经系统和生物化学反应的基本机制。以下逐一详细解析,并解释相关概念。 1. 应力-恢复-适应理论 概念解析 应力(Stress):指训练带来的负…...

各种排序算法
前置知识 排序: 按照递增或者递减的顺序把数据排列好 稳定性: 值相等的元素在排序之后前后顺序是否发生了改变 内部排序: 数据放在内存上 外部排序: 数据放在磁盘上 内部排序 基于比较的排序 几大排序算法 1. 堆排序 特点: 思想: 1. 创建大根堆,把所有元素放在大根堆里…...
源码解读笔记:协程的 ViewModel.viewModelScope和LifecycleOwner.lifecycleScope
分析下ViewModel.viewModelScope public val ViewModel.viewModelScope: CoroutineScopeget() {val scope: CoroutineScope? this.getTag(JOB_KEY)if (scope ! null) {return scope}return setTagIfAbsent(JOB_KEY,CloseableCoroutineScope(SupervisorJob() Dispatchers.Ma…...
11.27周三F34-Day8打卡
文章目录 1. 学习让我感觉很棒。(什么关系?动作 or 描述?主语部分是?)解析答案:【解析答案分析】【对比分析】【拓展内容】2. 她忽然想起来钥匙放另一个包里了。解析答案:【拓展内容】3. 她来不来都没关系。(该由什么引导?这句话又属于什么关系,动作 or 描述?)解析答案…...

XG(S)-PON原理
前言 近年来,随着全球范围内接入市场的飞快发展以及全业务运营的快速开展,已有的PON技术标准在带宽需求、业务支撑能力以及接入节点设备和配套设备的性能提升等方面都面临新的升级需求XG(S)-PON(10G GPON)是在已有GPON技术标准上演进的增强下一代GPON技…...

C语言实例之9斐波那契数列实现
1. 斐波那契数列简介 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多・斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为 “兔子数列”。 它的特点是从第三…...

YOLO系列论文综述(从YOLOv1到YOLOv11)【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】
目录 1 前言2 YOLO在不同领域的应用3 物体检测指标和NMS3.1 mAP和IOU3.2 mAP计算流程3.2.1 VOC 数据集3.2.2 微软 COCO 数据集 3.3 NMS 1 前言 最近在做目标检测模型相关的优化,重新看了一些新的论文,发现了几篇写得比较好的YOLO系列论文综述࿰…...

数据结构--Map和Set
目录 一.二叉搜索树1.1 概念1.2 二叉搜索树的简单实现 二.Map2.1 概念2.2 Map常用方法2.3 Map使用注意点2.4 TreeMap和HashMap的区别2.5 HashMap底层知识点 三.Set3.1 概念3.2 Set常用方法3.3 Set使用注意点3.4 TreeSet与HashSet的区别 四.哈希表4.1 概念4.2 哈希冲突与避免4.3…...

计算机操作系统——进程控制(Linux)
进程控制 进程创建fork()函数fork() 的基本功能fork() 的基本语法fork() 的工作原理fork() 的典型使用示例fork() 的常见问题fork() 和 exec() 结合使用总结 进程终止与$进程终止的本质进程终止的情况正常退出(Exit)由于信号终止非…...

【前端】ES6基础
1.开发工具 vscode地址 :https://code.visualstudio.com/download, 下载对应系统的版本windows一般都是64位的 安装可以自选目录,也可以使用默认目录 插件: 输入 Chinese,中文插件 安装: open in browser,直接右键文件…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...