《人生苦短,我学Python》——列表(List)

news2024/11/24 2:00:02

昨天,我们学习了一种数据结构——元组。今天我们将学习另一种数据结构——列表

列表又叫List,与元组的结构类似,也可以用于存储多个类型的数据。接下来,我们一起学习列表的用法–>


在这里插入图片描述


文章目录

  • 一、要点先知:
  • 二、基础讲解:
    • 1. 存储对象——装什么?
    • 2. 访问方法——如何访?
      • (1)取单个元素——索引:
      • (2)取连续多个元素——切片:
        • 常规切片法:
        • 步长切片法:
        • 列表逆序切片法:
    • 3. 修改错误——如何改?
      • :warning:列表和元组的异同:
    • 4. 追加元素——append():
    • 5. 插入元素——insert():
    • 6. 删除元素——pop():
  • 三、列表的另类定义:


一、要点先知:

我们通过下面这段代码来理解列表的相关知识:

# 定义一个列表:
friendName = ["Kevin", "Tony", "Asum"]

# 输出整个列表:
print(friendName)

# 访问列表的第一个元素:
print(friendName[0])

# 修改列表的第一个元素:
friendName[0] = "Jessica"

# 切片访问列表元素:(下标从0开始)
# 1.切片访问整个列表,冒号两边没有数字
print(friendName[:])

# 2.切片访问从第二个元素开始的所有后续元素
print(friendName[1:])

# 3.切片访问第一个到第三个元素(但不包括第三个),即访问第一个和第二个元素
print(friendName[:2])

# 4.切片访问第2个元素
print(friendName[1:2])

# 5.列表逆序输出:
print(friendName[::-1])

# 向列表中追加元素:
friendName.append(2021)
#print(friendName)

# 向列表中追加列表:
friendName.append(["May", "Anna"])
#print(friendName)

# 使用insert()往列表第一项添加元素"Tony":
friendName.insert(0,"Tony")

# 使用pop()1删除列表中的元素:
# 没有参数时默认删除列表末尾
friendName.pop()

# 删除列表第二个元素(下标从0开始)
friendName.pop(1)


  • friendName:变量名,用来存储这个列表。

  • []:一对中括号,是定义列表的固定格式。

  • ,:逗号,列表内部数据之间使用逗号分隔开。

  • 空格:两个空格,这里的空格不是必须的。但为了代码美观,建议在逗号后面加一个空格。

  • 字符串:三个字符串,是friendName这个列表里面包含的具体数据。

✨如果你已经有了一定的编程基础(比如C,C++,Java等等),相信本文后面的内容将对你作用不大,可以自行跳过,后面的内容主要争对于将python作为第一门编程语言的同学。


二、基础讲解:

1. 存储对象——装什么?

我们知道元组中可以存储多种类型的数据。

列表与元组一样,列表中的数据元素也可以是任何一种类型,如下所示,整型、浮点型、布尔数等。除此之外,也可以是整型,浮点型,字符串或布尔数的任意组合。

#  元素全是整数的列表
integer=[1,2,3,5,7]
#  元素全是浮点数的列表
floatNumber=[1.5,1.6,1.7,1.8]
#  元素全是字符串的列表
string=['aa','b','c','d']
#  元素全是布尔值的列表
boolList=[True,False,True,False]
# 元素全是列表的列表
listList=[[1,2,3],[4,5,6],[7,8,9]]
#  元素全是元组的列表
tupleList=[(1,2,3),(4,5,6),(7,8,9)]
#  元素全是字典的列表
dictList=[{'name':'Tom','age':18},{'name':'Jerry','age':20}]
#  元素全是集合的列表
setList=[{1,2,3},{4,5,6},{7,8,9}]
#  元素全是range的列表
rangeList=[range(1,10),range(10,20),range(20,30)]
#  元素全是None的列表
noneList=[None,None,None,None]
#  元素是混合类型的列表
mixList=[1,1.5,'aa',False,[1,2,3],(7,8,9),{'name':'Jerry','age':20},{1,2,3},range(1,10),None]

print(integer)
print(floatNumber)
print(string)
print(boolList)
print(listList)
print(tupleList)
print(dictList)
print(setList)
print(rangeList)
print(noneList)
print(mixList)

2. 访问方法——如何访?

(1)取单个元素——索引:

前面我们学过,使用索引能够获取元组中的元素,而列表与元组类似,也可以使用索引。

#  元素全是整数的列表
integer=[1,2,3,5,7]
#  取出第一个元素
first=integer[0]
#  取出最后一个元素
last=integer[-1]
# 打印元素
print(first,last)
# 修改最后一个元素
integer[-1] = 9
# 打印列表
print(integer)

如上,我们成功地对integer数组进行了取单个元素的操作。

⚠️列表在索引时最容易出现以下 bug:

索引错误

列表中有6个元素,从0开始索引,最大的索引为5或-1

  • 当索引的值超过5以后,就会出现越界并提示:列表索引超出范围(IndexError: list index out of range)

我们知道索引用于取单个元素,如果要提取列表中的多个连续的元素,该怎么操作呢?

接下来,我们先学习切片的概念。


(2)取连续多个元素——切片:

定义:编程中的切片能对元组、列表等有序数据结构进行处理,以截取数据中连续的片段,方便使用。

隐喻:就像从长条面包里面切出某一段面包一样,从一段线性排列的数据中选取某一段数据。
在这里插入图片描述

这段代码做的事情是定义了一个叫做"integer"的列表,并对其进行了切片操作:

#  元素全是整数的列表
integer=[1,2,3,5,7]
#  切出第一个和第二个元素
print(integer[0:2])

[:] 括号中既有数字也有冒号,表明要对列表进行切片;冒号用于分隔切片开始的位置和切片终止的位置。

切片要遵循“左闭右开”原则,就是取左边的数据,不取右边的数据,与数学中的区间类似[0, 2),取左不取右,所以输出[1,2]

⚠️注意:切片与索引类似,也是从0开始,即第一个元素的索引为0。


Python中的切片操作非常灵活,可以通过指定不同的参数来实现不同的切片方式。下面是一些常见的切片操作示例:

常规切片法:

(1.list[start:end]:从索引start开始,到索引end-1结束,以步长为1切片。共有3种情况:

1️⃣开始位置数字不填,默认从第一个元素开始切片。根据“左闭右开”原则,如图,从第一个元素(含)开始,取到第三个元素(含)。
在这里插入图片描述

2️⃣结束位置数字不填,默认从开始位置切片,取到最后一个元素。

注意:不填写结束位置的数字时,列表中最后一个元素也会被提取。如图,表示从第二个元素(含)开始,到最后一个元素(含)结束。
在这里插入图片描述
3️⃣开始位置和结束位置都不填写时,就是取列表中的所有元素。如图,[:]直接取出所有元素,但这种用法不常见,了解即可。
在这里插入图片描述


步长切片法:

(2.list[start:end:step]:从索引start开始,到索引end-1结束,以步长为step切片。

 integer=[1,2,3,5,7]
#步长为2进行切片
print(integer[0::2])

列表逆序切片法:

(3.list[::-1]:以步长为-1切片,实现列表的逆序。

integer=[1,2,3,5,7]
#  步长为-1进行逆序
print(integer[::-1])

学习了列表的切片方法后,元组也可以使用切片来截取一段数据,如下所示。

integer=(1,2,3,5,7)
#  步长为2进行切片
print(integer[::2])
# [0,2)切片
print(integer[:2])
# [1,4)切片
print(integer[1:4])
# 逆序
print(integer[::-1])

3. 修改错误——如何改?

学习了索引和切片访问列表中数据的方式后,如果,某个列表中的数据定义错误了,想要进行修改,该怎样操作呢?

可以直接对相应的元素进行值覆盖!

friendName = ["Kevin", "Tony", "Asum"]
print(friendName)
print(friendName[0])
# 修改,值覆盖
friendName[0] = "Jessica"
print(friendName)

⚠️列表和元组的异同:

相同点

  1. 可以使用索引定位到某个元素;
  2. 可以使用切片取一个片段;
  3. 可以存储不同的数据,如,字符串、整型、浮点型、布尔数等。

不同点:元组的内容定义完成后,里面的内容就不能再修改了!(元组具有不可变的特性)

由于,元组是不可修改的,强行修改会出现以下 bug:
类型错误:
当对元组进行修改时,就会提示元组类型数据更改(TypeError: ‘tuple’ object does not support item assignment)。


4. 追加元素——append():

想象一下在食堂排队打饭,你会自动排在队伍的最后方。

此时排的队列就像是一个列表,自动排在最后方的行为,可以类比为一次对这个列表的“追加”。
在这里插入图片描述
定义:追加一般用于描述在列表的末尾添加元素的行为。

当我们想在列表的尾部追加一个元素的时候,可以在列表名后使用 append() 语句。


integer=(1,2,3,5,7)
#  在列表中添加元素9
integer.append(9)
#  继续在列表中添加元素11
integer.append(11)

print(integer)

句点:一个句点,表明将会使用列表的某个内置功能。

  • 这是一个固定的搭配格式,只能使用英文句号,不能替换成其他符号。

append:类似print,表明我们要在这个列表的尾部添加新的元素。

( ):一对英文括号,这是 append 功能的固定格式。括号内是具体要添加到列表末尾的元素。

  • 使用 append() 可以追加不同数据类型,包括:字符串、整型、浮点型、元组以及列表等。

5. 插入元素——insert():

在 Python 中,可以使用 insert() 语句来执行插入元素的操作。

integer=[1,2,3,5,7]
#  在列表中添加元素9
integer.insert(1,9)
#  继续在列表中添加元素11
integer.insert(3,11)

print(integer)

句点:句点,表明将会使用列表的某个内置功能。

insert:类似print。表明我们要在这个列表的某个位置插入新的元素。

( ):一对括号,这是insert功能的固定格式。括号内是插入的元素位置以及要插入的元素。

索引:第一个数字位置表示索引,也就是这个元素要插入到列表中的位置。索引是从 0 开始。

逗号:一个逗号,用来分隔插入的位置以及插入的具体数据。

插入元素:插入的元素可以是不同数据类型,包括:字符串、整型、浮点型、元组以及列表等。

  • 插入元素以后,排在此元素之后的原有元素自动后移一位。

列表插入元素的场景在生活中很常见,例如游戏排行榜。

游戏玩家得分如果能上榜排行,系统就会把玩家的分数插入排行榜中。

插入玩家名称和分数后,排在之后的玩家自动后移一位。


6. 删除元素——pop():

如果列表中存在我们不需要的元素,想要删除它,这该怎么操作呢?

这时,我们可以使用 pop(),删除列表中的元素。

integer=[1,2,3,5,7]
#  删除列表最后一个元素
integer.pop()
#  删除列表中的第一个元素
num=integer.pop(0)

print(integer)
print(num)

pop(),作用是删除列表中指定索引处的元素。

括号内的数字表示要删除数据的索引,不填写数字则表示默认删除列表中的最后一个数据。

pop() 在删除列表指定的元素后,可以赋值给变量存储下来。


三、列表的另类定义:

我们前面的例子在定义一个列表时,都是使用的常量来作为列表中的元素。

变量也同样可以作为定义列表的元素,并且列表的各种操作也同样适用于变量数据。

first=1
second=2
third=3
integer=[first,second,third]
#  删除列表最后一个元素
integer.pop()
#  删除列表中的第一个元素
num=integer.pop(0)

print(integer)
print(num)

上述代码中展示了变量作为列表元素时,代码的使用方式。


好了,列表的内容就到这里了,我们下期再见!
在这里插入图片描述

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

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

相关文章

喊山(数据结构习题)

喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先…

DeU-Net: 用于三维心脏mri视频分割的可变形(Deformable)U-Net

论文链接:https://arxiv.org/abs/2007.06341 代码链接:文章都看完了实在找不到代码!好崩溃!好崩溃!已经发邮件联系作者! 摘要 心脏磁共振成像(MRI)的自动分割促进了临床应用中高效、准确的体积测量。然而…

企业密码安全:ADSelfService Plus 提升密码管理的千里之行

在当今数字化时代,企业的密码安全变得至关重要。密码是保护企业敏感信息和数据的第一道防线,而有效的密码管理对于确保网络安全至关重要。ADSelfService Plus是一款强大的密码管理和自助服务解决方案,它在提供密码安全方面走在了前沿。 ADSel…

动态表单设计

动态表单设计 背景方案讨论基于上面分析,对比调研,自定义动态表单数据模型表单详解(一) 表单模板:jim_dynamic_form(二)表单数据类型:jim_form_data_type(三)…

前端面试经典题--页面布局

题目 假设高度已知&#xff0c;请写出三栏布局&#xff0c;其中左、右栏宽度各为300px&#xff0c;中间自适应。 五种解决方式代码 浮动解决方式 绝对定位解决方式 flexbox解决方式 表格布局 网格布局 源代码 <!DOCTYPE html> <html lang"en"> <…

vue优化首屏加载时间优化-gzip压缩

前言 为什么要进行首屏加载优化&#xff0c;因为随着我们静态资源和第三方包和代码增加&#xff0c;压缩之后包会越来越大 随着网络的影响&#xff0c;在我们第一输入url请求资源时候&#xff0c;网络阻塞&#xff0c;加载时间长&#xff0c;用户体验不好 仔细观察后就会发现…

解锁在线教育新机遇|V-More在线教育行业沙龙圆满落幕!

AIGC技术的渗透&#xff0c;也将为在线教育领域带来新的模式创新。面对以上增长机遇与潜在挑战&#xff0c;在线教育企业想要做好用户增长和技术降本并不简单。 9月1日&#xff0c;由火山引擎、AMD与msup联合举办的在线教育行业私享会成功举办&#xff0c;40余位在线教育行业的…

如何利用ProcessOn 做资产管理流程图

资产管理 是一家公司最重要的管理活动。好的资产管理可以让资源最优化利用&#xff0c;实现资产价值的最大化。可以帮助组织管理和降低风险。同时当需要决策的时候&#xff0c;对资产数据进行分析和评估&#xff0c;也可以帮助做出更明智的决策&#xff0c;如优化资产配置、更新…

YOLOV7改进-添加P2和P6检测层(以YOLOV7-Tiny为例)

下载三个配置文件地址 1、加p6 1、配置文件添加 2、让它自己利用k-means算法进行聚类 3、如果从8或9出来&#xff0c;在这里改 完整

NoUniqueBeanDefinitionException: expected single matching bean but found 2

文章目录 前言一、错误现象二、原因分析三、解决办法总结 前言 看到这个错误,大致也能猜出错误的原因,就是spring中注入的bean重复了,本来应该是单利的bean,但是现在却找到了两个,那么导致这个问题的原因是什么?如何解决呢? 一、错误现象 运行项目或者运行junit测试,直接报…

修改Docker镜像默认下载地址

1、安装完docker desktop后&#xff0c;先不要打开 2、新建目录 D:\ProgramData\Docker 3、在C:\Users\你的用户名\AppData\Local下&#xff0c;打开cmd或者powershell执行以下命令&#xff0c;命令语法略有不同。 powershell命令&#xff1a; cmd /c mklink /J Docker D:\Pro…

知识图谱实战应用27-基于多模态数据的洪涝灾害知识图谱构建与实际应用

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用27-基于多模态数据的洪涝灾害知识图谱构建与实际应用。今年以来,很多省份都经历了暴雨肆虐,并造成了洪涝灾害,洪涝灾害是一种常见而严重的自然灾害,对人类社会和环境造成了巨大的影响。为了有效地应对洪涝灾害,构建…

Foxboro FBM232 P0926GW以太网通信模块

以太网通信&#xff1a;FBM232 P0926GW 模块支持以太网通信&#xff0c;可用于与其他设备、传感器、执行器和监控系统进行数据交换。 通信协议&#xff1a;模块通常支持多种通信协议&#xff0c;如Modbus TCP/IP、EtherNet/IP 等&#xff0c;以便与不同类型的设备和系统进行通…

3.xaml Label TextBox PasswordBox Button

1. Label TextBox PassWordBox Button a.运行图片 b.Xaml源码 <Grid><!--VerticalAlignment 控件竖直--><!--HorizontalAlignment 控件水平--><!--VerticalConte

etcd选举源码分析和例子

本文主要介绍etcd在分布式多节点服务中如何实现选主。 1、基础知识 在开始之前&#xff0c;先介绍etcd中 Version, Revision, ModRevision, CreateRevision 几个基本概念。 1、version 作用域为key&#xff0c;表示某个key的版本&#xff0c;每个key刚创建的version为1&#…

切片机制和MR工作机制

InputFormat基类 TextInputFormat&#xff1a;TextInputFormat是默认的FileInputFormat实现类。按行读取每条记录。键是存储该行在整个文件中的起始字节偏移量&#xff0c; LongWritable类型。 CombineTextInputFormat&#xff1a;CombineTextInputFormat用于小文件过多的场景…

什么是正向代理和反向代理

一、什么是正向代理 正向代理&#xff08;Forward Proxy&#xff09;是一种代理服务器&#xff0c;它位于客户端和服务端之间&#xff0c;代表客户端向其他服务器发送请求。 一般使用的场景就是&#xff0c;当客户端无法直接访问某些资源时&#xff0c;可以通过正向代理来访问…

QML实现文件十六进制数据展示

前言 将一个二进制文件直接拖放到Qt Creator中可以直接查看到以十六进制显示的数据格式&#xff0c;如&#xff1a; 要实现一个这样的效果&#xff0c;还是要花不少时间的。 在网上找了挺多示例&#xff0c;其中一个开源代码效果不错&#xff08;参考这里&#xff09;&#…

Linux:【Mysql】Centos7安装mysql8.0

目录 一、环境及版本介绍 二、安装前准备 三、开始安装 一、环境及版本介绍 Linux环境&#xff1a;Centos7 Mysql版本&#xff1a;8.0.26 安装时使用的用户&#xff1a;root 二、安装前准备 1.1、下载Centos7镜像 网上寻找相关资源即可 1.2、下载VMwareWorkstation Pro并…