列表基本概念

news2024/12/20 12:50:57

列表基本概念

本章和下一章,我们将逐步学习列表的基本概念,以及如何使用列表。列表是新手可以直接使用的最强大的Python功能之一,它既可以只存储几个元素,又可以存储上百万个元素。

3.1 什么是列表

列表(List)由一些列按照特定顺序排列的元素构成,它通常包含多个元素,元素之间既可以有逻辑关系,也可以无任何关联。

Python使用方括号[]表示列表,用逗号分隔其中的元素。例如,我们创建一个包含四种编程语言名称的列表:

>>> languages = ["Python","Java","C++","Go"]
>>> print(languages)
['Python', 'Java', 'C++', 'Go']

如果要将列表打印出来,Python会默认使用方括号包裹列表元素,元素之间使用逗号分割。

3.1.1 访问列表元素

列表是一个有序的数据集合,想要访问列表中的元素,我们可以使用元素的索引(在列表中的序号)。

例如,我们想要访问languages列表的第一个元素:

>>> languages = ["Python","Java","C++","Go"]
>>> print(languages[0])
Python

我们还可以针对列表的元素,调用上一章节介绍的字符串方法,例如使用upper()方法让元素改为全大写:

>>> languages = ["Python","Java","C++","Go"]
>>> print(languages[0].upper())
PYTHON

3.1.2 列表元素索引

在Python中,列表的索引是从0开始的,也就是列表第一个元素的索引编号是0,大多数的编程语言皆是如此。

所以,在Python中访问第二个元素使用索引1,第三个元素使用索引2,以此类推。

>>> languages = ["Python","Java","C++","Go"]
>>> print(languages[1]) # 访问第二个元素
Java
>>> print(languages[2]) # 访问第三个元素
C++

Python还提供了一种倒序访问列表元素的方法,我们可以使用负数表示列表元素的倒排序,例如-1表示倒数第一个元素,-2表示倒数第二个元素。

>>> languages = ["Python","Java","C++","Go"]
>>> print(languages[-1]) # 访问倒数第一个元素
Go
>>> print(languages[-2]) # 访问倒数第二个元素
C++

这是一种非常有用的语法,特别是当你不知道列表具体长度的时候,可以直接倒排序访问元素。

3.2 列表元素增删改

大多数情况下,我们都需要对列表元素进行修改,从而满足程序运行的需要。例如,我们使用一个列表记录一个班级所有的学生,当有学生退出这个班级时就需要删除元素。

3.2.1 修改列表元素

修改元素列表的语法和访问元素类似,只需要将新的元素值赋值到元素上即可。例如,我们有一个人名列表,我们可以修改其中第二个元素的值:

>>> names=["xiaoming","xiaohong","xiaoli","xiaozhang"]
>>> names[1]="xiaoliu"
>>> names
['xiaoming', 'xiaoliu', 'xiaoli', 'xiaozhang']

3.2.2 添加列表元素

Python提供了多种在既有列表中添加新数据的方式。

在列表的末尾追加元素

列表操作方法append()可以将新元素追加到列表的末尾。

>>> nums=[1,2,3]
>>> nums.append(4)
>>> nums
[1, 2, 3, 4]

我们还可以创建一个空列表,根据业务需要,不断的追加数据:

>>> my_cars=[]
>>> my_cars.append('Bentley')
>>> my_cars.append('Lamborghini')
>>> my_cars.append('Ferrari')
>>> my_cars
['Bentley', 'Lamborghini', 'Ferrari']

这种从空列表开始的追加方式非常常见,因为在程序运行初期往往是从空开始的,伴随着不断的运行,不断的往列表中追加数据。

指定位置插入元素

使用insert()方法可以将新元素插入到列表的任意位置,例如,我们在一个列表的头部插入一个元素:

>>> my_cars = ['Bentley', 'Lamborghini', 'Ferrari']
>>> my_cars.insert(0,'xiaomi')
>>> my_cars
['xiaomi', 'Bentley', 'Lamborghini', 'Ferrari']

在使用insert()方法时,需要提供两个参数,第一个参数是需要插入的位置,被占用位置的旧元素向后移一个位置,第二个元素是需要插入的新元素。

同样的,我们还可以使用insert()方法实现在末尾插入一个元素:

>>> my_cars = ['Bentley', 'Lamborghini', 'Ferrari']
>>> my_cars.insert(3,'xiaomi')
>>> my_cars
['Bentley', 'Lamborghini', 'Ferrari', 'xiaomi']

此外,我们还可以使用负数作为下标插入元素,但是情况可能和想象的稍有差别:

>>> my_cars = ['Bentley', 'Lamborghini', 'Ferrari']
>>> my_cars.insert(-2,'xiaomi')
>>> my_cars
['Bentley', 'xiaomi', 'Lamborghini', 'Ferrari']

以上代码在倒数第二个位置插入了新元素,插入完成后新元素的下标并非-2,而是-3,造成这种现象的原因是:被占用的元素会向后移动一个位置!

3.2.3 删除列表元素

删除列表元素也是列表操作的重要组成部分,我们在编写程序时经常需要从列表中删除数据,例如注销账户时就需要把用户从列表中删掉。

del 删除语句

del语句可以删除列表指定位置的元素,例如删除第二个元素:

>>> my_cars = ['Bentley', 'Lamborghini', 'Ferrari']
>>> del my_cars[1] # 删除第二个元素
>>> my_cars
['Bentley', 'Ferrari']
pop()删除末尾元素

在有些场景下,我们希望在删除元素后继续使用元素的值,这就需要使用pop()方法(del方法删除后,元素值完全消失了),pop()方法在删除元素后,还会返回被删除元素的值。

pop()方法会默认从列表的末尾删除元素:

>>> my_cars = ['Bentley', 'Lamborghini', 'Ferrari']
>>> last_car = my_cars.pop()
>>> my_cars
['Bentley', 'Lamborghini']
>>> last_car
'Ferrari'

pop()方法和push()方法常常结对使用,用来模拟栈数据结构的先进后出特性,这在算法编写中至关重要。

pop()删除任意元素

如果我们给pop()方法传入一个索引值,那么它就可以根据索引值删除列表中任意位置的元素:

>>> my_cars = ['Bentley', 'Lamborghini', 'Ferrari']
>>> car = my_cars.pop(1)
>>> my_cars
['Bentley', 'Ferrari']
>>> car
'Lamborghini'
remove()删除指定值

有时候,我们只知道要删除元素的值,而不知道元素具体的位置,就需要使用remove()方法删除指定的值:

>>> my_cars = ['Bentley', 'Lamborghini', 'Ferrari']
>>> my_cars.remove('Lamborghini')
>>> my_cars
['Bentley', 'Ferrari']

注意,remove()方法只删除遇到的第一个和目标值相同的元素,如果列表中有多个相同的元素,那么只会删除第一个:

>>> my_cars = ['Bentley', 'Lamborghini', 'Ferrari', 'Ferrari']
>>> my_cars.remove('Ferrari')
>>> my_cars
['Bentley', 'Lamborghini', 'Ferrari'] 

以上代码只是删除了第一个"Ferrari",第二个元素仍然保留。如果想要彻底删除全部的相同值,就需要使用循环,这在后继章节会有介绍。

3.3 列表排序

将一个元素值无序的列表转为有序的列表是一个常见的需求,Python针对这个需求提供了多个列表排序方法。

3.3.1 sort()永久排序

现在,假设我们有一个存储考试成绩的无序列表,我们希望将列表按照递增的顺序排列,那么我们就可以使用sort()方法:

>>> scores = [99,34,29,100]
>>> scores.sort()
>>> scores
[29, 34, 99, 100]

注意,sort()方法会直接修改原列表的元素顺序,修改后的列表再也无法恢复到原来的顺序。

除了对数字进行排序,我们还可以对字符串进行排序:

>>> words = ['abandon','python','java']
>>> words.sort()
>>> words
['abandon', 'java', 'python']

字符串排序的时候,使用的是字母顺序,顺序和26个英文字母的顺序是一致的。

除了顺序排列列表元素之外,我们还可以给sort()方法传入一个参数,让列表倒序排列:

>>> scores = [99,34,29,100]
>>> scores.sort(reverse=True)
>>> scores
[100, 99, 34, 29]

3.3.2 sorted()临时排序

如果我们希望将列表排序的同时,保持原列表内容顺序不变,就需要使用sorted()方法:

>>> scores = [99,34,29,100]
>>> sorted(scores)
[29, 34, 99, 100]
>>> scores
[99, 34, 29, 100]

以上代码中sorted()方法会返回列表的新顺序,同时保持原列表顺序不变。

我们还可以给sorted()方法传入reverse=True参数,从而实现倒排序效果:

>>> sorted(scores,reverse=True)
[100, 99, 34, 29]

3.3.3 reverse()反转列表

要反转元素顺序,可以使用reverse()方法:

>>> values=[1,3,'abc','bbc',2.3]
>>> values.reverse()
>>> values
[2.3, 'bbc', 'abc', 3, 1]

注意,reverse()不会将元素按照顺序或者逆序排列,仅仅是将原列表原封不动的点到顺序。

reverse()会永久的修改原列表的顺序,如果再次调用reverse()方法,列表就会重新调转回来。

3.3.4 获取列表长度

使用len方法可以快速的获取列表的长度。

>>> students=['xiaoming','xiaohong','xiaoli']
>>> len(students)
3

3.4 本章小节

通过本章节内容,我们学习了Python数据类型List的基本概念,以及针对List的增删改操作。同事,我们还学习了列表的排序、反转和长度获取方法。

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

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

相关文章

无人机航测系统技术特点!

一、无人机航测系统的设计逻辑 无人机航测系统的设计逻辑主要围绕实现高效、准确、安全的航空摄影测量展开。其设计目标是通过无人机搭载相机和传感器,利用先进的飞行控制系统和数据处理技术,实现对地表信息的全方位、高精度获取。 需求分析&#xff1…

Java学习笔记(13)——面向对象编程

面向对象基础 目录 面向对象基础 方法重载 练习: 继承 继承树 protected super 阻止继承 向上转型 向下转型 区分继承和组合 练习 小结: 方法重载 如果有一系列方法,功能类似,只是参数有所不同,就可以把…

Running CMake (运行 CMake)

Running CMake {运行 CMake} 1. CLion - Create a new CMake project2. Running CMake (运行 CMake)2.1. Building a project (构建项目)2.2. Picking a compiler (指定编译器)2.3. Verbose and partial builds (详细和部分的构建)2.4. Options (选项)2.4.1. Standard options …

穷举vs暴搜vs深搜vs回溯vs剪枝专题一>子集

题目&#xff1a; 两个方法本质就是决策树的画法不同 方法一解析&#xff1a; 代码&#xff1a; class Solution {private List<List<Integer>> ret;//返回结果private List<Integer> path;//记录路径&#xff0c;注意返回现场public List<List<Int…

MTU 使用使用解释

MTU (Maximum Transmission Unit&#xff0c;最大传输单元) 指的是网络链路层 (例如以太网) 能够传输的最大数据帧大小&#xff0c;以字节为单位。理解 MTU 对网络性能和可靠性至关重要&#xff0c;因为它直接影响数据包的分片 (Fragmentation) 和重组。本文档将详细解释 MTU 的…

uniapp v-tabs修改了几项功能,根据自己需求自己改

根据自己的需求都可以改 这里写自定义目录标题 1.数组中的名字过长&#xff0c;导致滑动异常2.change 事件拿不到当前点击的数据&#xff0c;通过index在原数组中查找得到所需要的id 各种字段麻烦3.添加指定下标下新加红点显示样式 1.数组中的名字过长&#xff0c;导致滑动异常…

iOS - 超好用的隐私清单修复脚本(持续更新)

文章目录 前言开发环境项目地址下载安装隐私访问报告隐私清单模板最后 前言 在早些时候&#xff0c;提交应用到App Store审核&#xff0c;大家应该都收到过类似这样的邮件&#xff1a; Although submission for App Store review was successful, you may want to correct th…

c语言-----数组

基本概念 数组是C语言中一种用于存储多个相同类型数据的数据结构。这些数据在内存中是连续存储的&#xff0c;可以通过索引&#xff08;下标&#xff09;来访问数组中的各个元素。数组的索引从0开始&#xff0c;这是C语言的规定。例如&#xff0c;一个有n个元素的数组&#xff…

社区版 IDEA 开发webapp 配置tomcat

1.安装tomcat 参考Tomcat配置_tomcat怎么配置成功-CSDN博客 2.构建webapp项目结构 新建一个普通项目 然后添加webapp的目录结构&#xff1a; main目录下新建 webapp 文件夹 webapp文件夹下新建WEB_INF文件夹 *WEB_INF目录下新建web.xml wenapp文件夹下再新建index.html …

全面解析 Kubernetes 流量负载均衡:iptables 与 IPVS 模式

目录 Kubernetes 中 Service 的流量负载均衡模式 1. iptables 模式 工作原理 数据路径 优点 缺点 适用场景 2. IPVS 模式 工作原理 数据路径 优点 缺点 适用场景 两种模式的对比 如何切换模式 启用 IPVS 模式 验证模式 总结 Kubernetes 中 Service 的流量负载…

C 语言数据类型详解

目录 一、引言 二、基本数据类型 &#xff08;一&#xff09;整型 &#xff08;二&#xff09;浮点型 &#xff08;三&#xff09;字符型 三、构造数据类型 &#xff08;一&#xff09;数组 &#xff08;二&#xff09;结构体 &#xff08;三&#xff09;联合体&#…

Python图注意力神经网络GAT与蛋白质相互作用数据模型构建、可视化及熵直方图分析...

全文链接&#xff1a;https://tecdat.cn/?p38617 本文聚焦于图注意力网络GAT在蛋白质 - 蛋白质相互作用数据集中的应用。首先介绍了研究背景与目的&#xff0c;阐述了相关概念如归纳设置与转导设置的差异。接着详细描述了数据加载与可视化的过程&#xff0c;包括代码实现与分析…

LeetCode 1925 统计平方和三元组的数目

探索平方和三元组&#xff1a;从问题到 Java 代码实现 在数学与编程的交叉领域&#xff0c;常常会遇到一些有趣且富有挑战性的问题。今天&#xff0c;就让我们深入探讨一下 “平方和三元组” 这个有趣的话题&#xff0c;并使用 Java 语言来实现计算满足特定条件的平方和三元组…

回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测

回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效…

vue横向滚动日期选择器组件

vue横向滚动日期选择器组件 组件使用到了element-plus组件库和dayjs库&#xff0c;使用前先保证项目中已经下载导入 主要功能&#xff1a;选择日期&#xff0c;点击日期可以让此日期滚动到视图中间&#xff0c;左滑右滑同理&#xff0c;支持跳转至任意日期&#xff0c;支持自…

Firecrawl教程①:自动化抓取与数据转化,赋能AI应用

Firecrawl教程①:自动化抓取与数据转化,赋能AI应用 前言一、功能特点1. 支持 LLM 可处理的数据格式2. 全面抓取网站3. 强大的操作支持4. 灵活的定制选项5. 支持多种编程语言 SDK二、如何开始使用 Firecrawl第一步:获取 API 密钥第二步:官网在线工具使用第三步:安装 Firecr…

WatchAlert - 开源多数据源告警引擎

概述 在现代 IT 环境中&#xff0c;监控和告警是确保系统稳定性和可靠性的关键环节。然而&#xff0c;随着业务规模的扩大和数据源的多样化&#xff0c;传统的单一数据源告警系统已经无法满足复杂的需求。为了解决这一问题&#xff0c;我开发了一个开源的多数据源告警引擎——…

svn版本丢失导致无法访问临时解决方法

#svn异常问题# 在使用svn的过程中&#xff0c;有时候在数据量比较大的情况下&#xff0c;有涉及到数据迁移或者是文件移动操作时容易出现迁移过程中有人还提交了数据&#xff0c;导致迁移的数据出现版本丢失的情况。 比如说&#xff0c;我实际遇到的情况是迁移数据的时候记录…

0009.基于springboot+layui的ERP企业进销存管理系统

一、系统说明 基于springbootlayui的ERP企业进销存管理系统,系统功能齐全, 代码简洁易懂&#xff0c;适合小白学编程,课程设计&#xff0c;毕业设计。 二、系统架构 前端&#xff1a;html| layui 后端&#xff1a;springboot | mybatis| thymeleaf 环境&#xff1a;jdk1.8 |…

Latex+VsCode+Win10搭建

最近在写论文&#xff0c;overleaf的免费使用次数受限&#xff0c;因此需要使用本地的形式进行编译。 安装TEXLive 下载地址&#xff1a;https://mirror-hk.koddos.net/CTAN/systems/texlive/Images/ 下载完成直接点击iso进行安装操作。 安装LATEX Workshop插件 设置VsCode文…