Python学习——【4.1】数据容器:list列表

文章目录

  • 【4.1】数据容器:list列表
    • 一、数据容器入门
    • 二、数据容器:list 列表
      • (一)列表的定义
      • (二)列表的下标索引
      • (三)列表的常用操作
        • (1)列表的查询功能
        • (2)列表的修改功能
      • (四)列表的特点
    • 三、列表的循环遍历
      • (一)while循环
      • (二)for循环
      • (三)while和for的对比

【4.1】数据容器:list列表

一、数据容器入门

为什么学习数据容器

  如果我想在程序中,记录5名学生的信息,如姓名。

  我可以定义5个name变量。但是这样不高级,而且效率低。

name1 = "stu01"
name2 = "stu02"
name3 = "stu03"
name4 = "stu04"
name5 = "stu05"

  也可以定义一个数据容器。一个变量即可完成,优雅且高效。

name_list = ["stu01", "stu02", "stu03", "stu04", "stu05"]
print(name_list)

  学习数据容器,就是为了批量存储、批量使用多份数据。

数据容器

  Python中的数据容器:

  一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素

  每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。

  数据容器根据特点的不同,如:

  1.是否支持重复元素;

  2.是否可以修改;

  3.是否有序,等等。

  分为5类,分别是:

  1.列表(list);

  2.元组(tuple);

  3.字符串(str);

  4.集合(set);

  5.字典(dict)。

二、数据容器:list 列表

(一)列表的定义

为什么需要列表

  一个人的姓名,可以使用一个字符串变量来存储。

  如果一个班级100位学生,每个人的姓名都要存储,应该如何写程序?声明100个变量吗?——不。使用列表就可以了,列表一次可以存储多个数据。

  列表(list)类型,是数据容器的一类。

列表的定义

  基本语法:

# 字面量
[元素1, 元素2, 元素3, 元素4, ...]# 定义变量
变量名称 = [元素1, 元素2, 元素3, 元素4, ...]# 定义空列表(两种方式)
变量名称 = []
变量名称 = list()

  列表内的每一个数据,称之为元素。注意:

  1.列表以[]作为标识;

  2.列表内的每一个元素之间用","隔开。

  示例:

# 使用[]的方式定义列表
name_list = ["zhangsan", "lisi", "wangwu"]
print(name_list)  # ['zhangsan', 'lisi', 'wangwu']
print(type(name_list))  # <class 'list'># 可以存储不同类型的元素
my_list = ["zhangsan", 666, True]
print(my_list)  # ['zhangsan', 666, True]
print(type(my_list))  # <class 'list'># 嵌套列表
my_list = [ [1, 2, 3], [4, 5, 6] ]
print(my_list)  # [[1, 2, 3], [4, 5, 6]]
print(type(my_list))  # <class 'list'>

  注意:列表可以一次存储多个数据,且可以为不同的数据类型,列表支持嵌套(相当于列表中的元素还是个列表)。

(二)列表的下标索引

  如何从列表中取出特定位置的数据呢?

  我们可以使用:下标索引。

image-20240920192940696

  如上图所示,列表中的每一个元素,都有其位置下标索引,从前向后的方向,从0开始,依次递增

  我们只需要按照下标索引,即可取得对应位置的元素。

# 语法: 列表[下标索引]name_list = ["Tom", "Lily", "Rose"]
print(name_list[0])  # Tom
print(name_list[1])  # Lily
print(name_list[2])  # Rose# 错误示范:通过下标索引取数据,一定不要超出范围
print(name_list[3])

  或者,可以反向索引,也就是从后向前:从-1开始,依次递减(-1、-2、-3、…)。

image-20240920193104498

# 语法: 列表[下标索引]name_list = ["Tom", "Lily", "Rose"]
print(name_list[-1])  # Rose
print(name_list[-2])  # Lily
print(name_list[-3])  # Tom

  如果列表是嵌套的列表,同样支持下标索引。

image-20240920193331939

my_list = [ [1, 2, 3], [4, 5, 6] ]print(my_list[1][1])  # 5

(三)列表的常用操作

  列表除了可以:

  1.定义;

  2.使用下标索引获取值。

  以外,列表也提供了一系列功能:

  1.插入元素;

  2.删除元素;

  3.清空列表;

  4.修改元素;

  5.统计元素个数。

  等等功能。这些功能我们都称之为:列表的方法

方法的概念

  函数是一个封装的代码单元,可以提供特定功能。

  在Python中,如果将函数定义为类(class)的成员,那么该函数就称之为方法。(面向过程称为函数,面向对象称为方法)

# 函数
def add(x, y):return x + yclass Student:# 方法def add(self, x, y):return x + y

  方法和函数功能一样,有传入参数、有返回值,只是方法的使用格式不同。

# 函数的使用
num = add(1, 2)# 方法的使用
stu = Student()
num = stu.add(1, 2)

  使用方法,我们需要先获得方法所在的类对象,然后通过类对象.方法来使用。除此之外,方法与函数没有任何区别。

  那么,如果我们想使用列表中定义的相关方法,就需要获取列表对象,然后调用其中定义好的方法即可。

image-20240921222210674

(1)列表的查询功能
  • 查找某元素的下标。

  功能:查找指定元素在列表的下标,如果找不到,报错ValueError。

# 语法
列表.index(元素)

  示例:

mylist = ["zhangsan", "lisi", "wangwu"]# 查找某元素在列表内的下标索引
index = mylist.index("lisi")
print(f"lisi在列表中的下标索引值是:{index}")  # lisi在列表中的下标索引值是:1# 如果被查找的元素不存在,则报错
index = mylist.index("hello")
print(f"hello在列表中的下标索引值是:{index}")  # ValueError: 'hello' is not in list
  • 统计某元素在列表中的数量
# 语法
列表.count(元素)

  示例:

mylist = [1, 1, 1, 2, 3]
print(mylist.count(1))  # 3
  • 统计列表内总共有多少个元素(即列表长度)
# 语法
len(列表)

  可以得到一个int数字,表示列表内的元素数量。

  示例:

mylist = [1, 2, 3, 4, 5]
print(len(mylist))  # 5
(2)列表的修改功能
  • 修改特定位置(索引)的元素值。
# 语法
列表[下标] =

  可使用如上语法,直接对指定下标(正向、反向下标均可)的值进行重新赋值(即修改)操作。

  示例:

# 正向下标
mylist = [1, 2, 3]
mylist[0] = 5
print(mylist)  # [5, 2, 3]# 反向下标
mylist = [1, 2, 3]
mylist[-3] = 5
print(mylist)  # [5, 2, 3]
  • 插入元素。
# 语法
列表.insert(下标, 元素)

  在指定的下标位置,插入指定的元素。

  示例:

mylist = [1, 2, 3]
mylist.insert(1, "hello")
print(mylist)  # [1, 'hello', 2, 3]
  • 追加元素
# 语法
列表.append(元素)# 语法2
列表.extend(其它数据容器)

  append方法,将指定元素(单个),追加到列表的尾部。

  extend方法,将其它数据容器的内容取出,依次追加到列表尾部。

  示例:

# 在列表尾部追加单个新元素
mylist = [1, 2, 3]
mylist.append(4)
print(mylist)  # [1, 2, 3, 4]# 在列表尾部追加多个新元素
mylist = [1, 2, 3]
mylist.append([4, 5, 6])
print(mylist)  # [1, 2, 3, [4, 5, 6]]mylist = [1, 2, 3]
mylist.extend([4, 5, 6])
print(mylist)  # [1, 2, 3, 4, 5, 6]
  • 删除元素
# 语法1
del 列表[下标]# 语法2
列表.pop(下标)  # 有返回值,返回值为被删除的元素

  示例:

mylist = [1, 2, 3]# 方式1
del mylist[0]
print(mylist)  # [2, 3]# 方式2
mylist.pop(0)
print(mylist)  # [3]element = mylist.pop(0)
print(f"删除了{element},删除后列表为:{mylist}")  # 删除了3,删除后列表为:[]
  • 删除某元素在列表中的第一个匹配项
# 语法
列表.remove(元素)

  示例:

mylist = [1, 2, 3, 2, 3]
mylist.remove(2)
print(mylist)  # [1, 3, 2, 3]
  • 清空列表内容
# 语法
列表.clear()

  示例:

mylist = [1, 2, 3]
mylist.clear()
print(mylist)  # []

(四)列表的特点

  列表有如下特点:

  • 可以容纳多个元素(元素个数上限为 2 63 − 1 2^{63}-1 2631个)
  • 可以容纳不同类型的元素
  • 数据是有序存储的(有下标序号)
  • 允许重复数据存在
  • 可以修改(增加或删除元素等)

三、列表的循环遍历

(一)while循环

  既然数据容器可以存储多个元素,那么就会有从容器内依次取出元素进行操作的需求。

  将容器内的元素依次取出进行处理的行为,称之为:遍历、迭代。

  问题:

  1.如何遍历列表元素?答:可以使用之前学过的while循环。

  2.如何在循环过程中取出列表元素?答:通过列表[下标]的方式取出。

  3.循环条件如何控制?答:定义一个下标变量,从0开始,循环控制条件为下标变量 < 列表长度

index = 0
while index < len(列表):元素 = 列表[index]对元素进行处理index += 1

  示例:

mylist = ["zhangsan", "lisi", "wangwu"]index = 0
while index < len(mylist):element = mylist[index]print(f"列表的元素:{element}")index += 1

(二)for循环

  对比while,for循环更加适合对列表等数据容器进行遍历。

# 语法
for 临时变量 in 数据容器:对临时变量进行处理

  表示从容器内,依次取出元素并赋值到临时变量上。

  在每一次的循环中,我们可以对临时变量(元素)进行处理。

  示例:

mylist = [1, 2, 3, 4, 5]for element in mylist:print(f"列表的元素有:{element}")

(三)while和for的对比

  1.在循环控制上

  • while循环可以自定循环条件,并自行控制;
  • for循环不可以自定循环条件,只可以依次从容器内取出数据。

  2.在无限循环上

  • while循环可以通过条件控制做到无限循环;
  • for循环理论上不可以,因为被遍历的容器内元素肯定不是无限的。

  3.在使用场景上

  • while循环适用于任何想要循环的场景;
  • for循环适用于遍历数据容器的场景,或简单的固定次数循环场景。

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

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

相关文章

RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验

1.RAGflow简介 全面优化的 RAG 工作流可以支持从个人应用乃至超大型企业的各类生态系统。大语言模型 LLM 以及向量模型均支持配置。基于多路召回、融合重排序。提供易用的 API&#xff0c;可以轻松集成到各类企业系统。支持丰富的文件类型&#xff0c;包括 Word 文档、PPT、exc…

Vue3入门 - ElementPlus中左侧菜单和Tabs菜单组合联动效果

在Vue3中&#xff0c;ElementPlus是使用比较广泛的UI组件库&#xff0c;提供了丰富的界面元素支持项目开发需求。在后台管理系统中&#xff0c;左侧或顶部的菜单栏通常包含多个子菜单项&#xff0c;通过菜单的展开和收缩功能&#xff0c;用户可以方便地查看或隐藏不需要的菜单项…

数字世界中的浪漫:揭秘会跳动的爱心

在编程的世界里&#xff0c;复杂的技术可以与艺术产生美妙的碰撞。无论是通过代码实现动态效果&#xff0c;还是用算法绘制图案&#xff0c;程序员都可以成为数字艺术的创作者。而今天&#xff0c;我们将通过 Python 的强大 GUI 工具库 Tkinter&#xff0c;用简单的代码生成一颗…

U-Boot顶层Makefile详解

直接参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 本文仅作为个人笔记使用&#xff0c;方便进一步记录自己的实践总结。 上一章我们详细的讲解了 uboot 的使用方法&#xff0c;其实就是各种命令的使用&#xff0c;学会 uboot 使用以后就可以尝试移植 uboot 到自己的开发…

linux操作系统的基本命令

1.linux下的文件系统 在linux操作目录下没有像window操作系统下盘符的概念,只有一个根目录/,所有文件目录都在它的下面 linux的目录结构: 在Linux系统中: 文件都从跟目录开始的,用/表示文件名称区分大小写路径都是以/俩进行分隔(windown用\分隔)以.开头的文件为隐藏文件 Li…

鸿蒙开发之ArkUI 界面篇 十七 购物综合案例

layoutWeight:子元素与兄弟元素主轴方向按照权重进行分配,参数是联合类型&#xff0c;数字或者是字符串&#xff0c;在指定的空间占多少份额&#xff0c;数字越大&#xff0c;表示在空间中占用的份额越多&#xff0c;如果父容器的子组件没有别的指定&#xff0c;剩下的空间全部…

10分钟一条童装走秀爆款Ai视频,小白轻松上手,新蓝海赛道,竞争小机会多!

今天我要给大家带来一个超级有趣的项目——童装走秀AI视频制作。 这不仅是一个充满创意的项目&#xff0c;而且操作简单&#xff0c;即使是视频制作的新手也能轻松上手。 更重要的是&#xff0c;这个项目竞争小&#xff0c;变现机会多&#xff0c;是进入新蓝海赛道的绝佳机会…

C++类之set与get理解

在类中&#xff0c;我们尝尝将一些变量设置为private或者protect里面&#xff0c;而我们经常会遇到在主函数&#xff08;main.cpp&#xff09;使用到这些private变量&#xff0c;而往往我们会下意识地在主函数直接调用在private里面的变量&#xff0c;但现实比较残酷&#xff0…

【linux】nice命令

Linux中的nice命令是一个强大的工具&#xff0c;用于调整进程的优先级&#xff0c;进而影响它们在CPU上的资源分配和执行顺序。以下是关于nice命令的详细解释&#xff0c;包括其用途、语法、参数、示例以及使用建议。 一、用途 nice命令主要用于控制进程在CPU上的调度优先级&…

K8S介绍+集群部署

Kubernetes介绍 官网&#xff1a;https://kubernetes.io/ 一、应用部署方式演变 1、传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其他技术的参与 缺点&#xff1a;不能为应用程序定义资源使用边界&a…

【论文笔记】BEVNeXt: Reviving Dense BEV Frameworks for 3D Object Detection

原文链接&#xff1a;https://arxiv.org/pdf/2312.01696 简介&#xff1a;最近&#xff0c;在摄像头3D目标检测任务中&#xff0c;基于查询的Transformer解码器正在超越传统密集BEV方法。但密集BEV框架有着更好的深度估计和目标定位能力&#xff0c;能全面精确地描绘3D场景。本…

初始网络编程(下)

所属专栏&#xff1a;Java学习 1. TCP 的简单示例 同时&#xff0c;由于 TCP 是面向字节流的传输&#xff0c;所以说传输的基本单位是字节&#xff0c;接受发送都是使用的字节流 方法签名 方法说明 Socket accept() 开始监听指定端口&#xff08;创建时绑定的端口&…

Navicat导入Sql文件至Mysql数据库,事务失效

Mysql 版本&#xff1a;8.0.39 Navicat 版本&#xff1a;17.x、16.x 结论&#xff1a; Navicat 导入sql文件&#xff0c;事务不会生效&#xff0c;无论怎么设置 mysql.exe 导入sql文件&#xff0c;事务生效 测试 准备一张表 name约束不能为空&#xff0c;用于测试事务失败…

SpringBoot 整合 Caffeine 实现本地缓存

目录 1、Caffeine 简介1.1、Caffeine 简介1.2、对比 Guava cache 的性能主要优化项1.3、常见的缓存淘汰算法1.4、SpringBoot 集成 Caffeine 两种方式 2、SpringBoot 集成 Caffeine 方式一2.1、缓存加载策略2.1.1、手动加载2.1.2、自动加载【Loading Cache】2.1.3、异步加载【As…

7、论等保的必要性

数据来源&#xff1a;7.论等保的必要性_哔哩哔哩_bilibili 等级保护必要性 降低信息安全风险 等级保护旨在降低信息安全风险&#xff0c;提高信息系统的安全防护能力。 风险发现与整改 开展等级保护的最重要原因是通过测评工作&#xff0c;发现单位系统内外部的安全风险和脆弱…

Linux启动流程,0,1,2进程,init进程,idle进程,内核态到用户态的kernel_execve(一)

&#xff1f;是&#xff0c;如果定义了&#xff0c;就按Makefile的&#xff0c;如果如下make编译时&#xff0c;就按如下 linux内核入口 进程0在用户空间看不到&#xff0c;因为他是内核进程 进程2就是守护进程&#xff0c;维护内涵运转的 一生二&#xff0c;二生三&#xff…

Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对

Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对的问题 解决办法 出现 Oracle Library is not loaded 错误提示&#xff0c;通常是因为 Navicat 无法找到或加载 Oracle 客户端库&#xff08;OCI.dll&#xff09;。要解决这个问题&#x…

IntelliJ IDEA 2024.1.4 (Ultimate Edition)找不到Add Framework Support解决方法

目录 背景: 解决方法&#xff1a; 步骤1: 步骤2&#xff1a; 步骤3&#xff1a; 创建Web项目的完整流程&#xff1a; 步骤1: 步骤2: 步骤3&#xff1a; 步骤4&#xff1a; Web优点: 背景: 我的IDE版本是IntelliJ IDEA 2024.1.4 (Ultimate Edition)&#xff0c;当我…

Java调用数据库 笔记05(查询篇)

一. 数据库&#xff08;通过各种驱动来实现调用&#xff09;&#xff1a; &#xff08;应用程序通过接口控制的各种数据库驱动来调用数据库-->jdbc方法&#xff09; 1.创建Java的普通class类 2.加载驱动 Class.forName("com.mysql.jdbc.Driver"); 3.驱动管理类…

nginx upstream转发连接错误情况研究

本次测试用到3台服务器&#xff1a; 192.168.10.115&#xff1a;转发服务器A 192.168.10.209&#xff1a;upstream下服务器1 192.168.10.210&#xff1a;upstream下服务器2 1台客户端&#xff1a;192.168.10.112 服务器A中nginx主要配置如下&#xff1a; log_format main…