Python 3 列表数据类型基本用法

介绍

列表 是 Python 中的一种数据结构,是一个可变、有序的元素序列。列表中的每个元素或值被称为一个项。就像字符串是在引号之间定义的字符一样,列表是通过在方括号 [ ] 之间放置值来定义的。

列表非常适合在需要处理许多相关值时使用。它们使您能够将属于一起的数据保存在一起,简化代码,并对多个值同时执行相同的方法和操作。

在考虑 Python 列表和其他集合类型的数据结构时,考虑一下计算机上的所有不同集合:文件的集合,歌曲播放列表,浏览器书签,电子邮件,可以在流媒体服务上访问的视频集合等等。

字符串列表

首先,让我们创建一个包含字符串数据类型项的列表:

sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']

当我们打印出列表时,输出与我们创建的列表完全相同:

print(sea_creatures)
['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']

作为一个有序的元素序列,列表中的每个项都可以通过索引单独调用。列表是一种由较小部分组成的复合数据类型,非常灵活,因为可以添加、删除和更改其值。当您需要存储大量值或迭代值,并且希望能够方便地修改这些值时,您可能希望使用列表数据类型。

在本教程中,我们将介绍一些在 Python 中使用列表的方法。

列表索引

列表中的每个项对应一个索引号,这是一个整数值,从索引号 0 开始。

对于列表 sea_creatures,索引的拆分如下:

‘shark’‘cuttlefish’‘squid’‘mantis shrimp’‘anemone’
01234

第一个项,字符串 'shark' 从索引 0 开始,列表以项 'anemone' 的索引 4 结束。

由于 Python 列表中的每个项都有一个相应的索引号,我们能够以与其他顺序数据类型相同的方式访问和操作列表。

现在我们可以通过引用其索引号来调用列表的离散项:

print(sea_creatures[1])
cuttlefish

此列表的索引号范围为 0-4,如上表所示。因此,要单独调用任何项,我们将使用以下索引号引用:

sea_creatures[0] = 'shark'
sea_creatures[1] = 'cuttlefish'
sea_creatures[2] = 'squid'
sea_creatures[3] = 'mantis shrimp'
sea_creatures[4] = 'anemone'

如果我们使用大于 4 的任何索引号调用列表 sea_creatures,它将超出范围,因为它将无效:

print(sea_creatures[18])
IndexError: list index out of range

除了正索引号,我们还可以使用负索引号访问列表中的项目,从列表的末尾开始向后计数,从 -1 开始。如果我们有一个很长的列表,并且希望精确指定列表末尾的项目,这将特别有用。

对于同一个列表 sea_creatures,负索引的拆分如下:

‘shark’‘cuttlefish’‘squid’‘mantis shrimp’‘anemone’
-5-4-3-2-1

因此,如果我们想要通过使用其负索引号打印项目 'squid',我们可以这样做:

print(sea_creatures[-3])
squid

我们可以使用 + 运算符将列表中的字符串项与其他字符串连接起来:

print('Sammy is a ' + sea_creatures[0])
Sammy is a shark

我们能够将索引号与列表中的项关联起来,以离散方式访问列表的每个项。

修改列表项

我们可以使用索引将列表中的项更改为不同的值。这使我们能够更好地控制列表,因为我们能够修改和更新它们包含的项。

如果我们想要将索引为 1 的项目的字符串值从 'cuttlefish' 更改为 'octopus',我们可以这样做:

sea_creatures[1] = 'octopus'

现在,当我们打印 sea_creatures 时,列表将会有所不同:

print(sea_creatures)
['shark', 'octopus', 'squid', 'mantis shrimp', 'anemone']

我们也可以使用负索引号更改项目的值:

sea_creatures[-3] = 'blobfish'
print(sea_creatures)
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']

现在,'blobfish' 已经替换了负索引号为 -3(对应正索引号 2)的 'squid'

能够修改列表中的项使我们能够以高效的方式更改和更新列表。

切片列表

我们还可以调用列表中的一些项。假设我们只想打印出 sea_creatures 的中间项,我们可以通过创建一个切片来实现。使用切片,我们可以通过创建由冒号 [x:y] 分隔的索引号范围来调用多个值:

print(sea_creatures[1:4])
['octopus', 'blobfish', 'mantis shrimp']

在创建切片时,例如 [1:4],第一个索引号是切片开始的地方(包括),第二个索引号是切片结束的地方(不包括),这就是为什么在我们上面的例子中,位置 123 的项会被打印出来。

如果我们想要包含列表 sea_creatures 的开头的任一端,我们可以省略 list[x:y] 语法中的一个数字。例如,如果我们想要打印出列表 sea_creatures 的前三个项 —— 'shark''octopus''blobfish' —— 我们可以这样做:

print(sea_creatures[:3])
['shark', 'octopus', 'blobfish']

这打印了列表的开头,停在索引 3 之前。

要包含列表末尾的所有项,我们将反转语法:

print(sea_creatures[2:])
['blobfish', 'mantis shrimp', 'anemone']

我们还可以在切片列表时使用负索引号,类似于正索引号:

print(sea_creatures[-4:-2])
print(sea_creatures[-3:])
['octopus', 'blobfish']
['blobfish', 'mantis shrimp', 'anemone']

我们还可以在切片中使用名为步幅的参数,它指的是在从列表检索第一个项目之后移动多少项目。到目前为止,我们已经省略了步幅参数,并且 Python 默认为步幅 1,因此从两个索引号之间检索的每个项目。

构造的语法是 list[x:y:z],其中 z 是步幅。让我们创建一个更大的列表,然后切片它,并给步幅赋值 2

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]print(numbers[1:11:2])
[1, 3, 5, 7, 9]

我们的构造 numbers[1:11:2] 打印了包括 1 和不包括 11 的索引号之间的值,然后步幅值为 2,告诉程序只打印每隔一个项目。

我们可以省略前两个参数,仅使用步幅作为参数,其语法为 list[::z]

print(numbers[::3])
[0, 3, 6, 9, 12]

通过将步幅设置为 3,只打印每三个项目。

使用正索引号和负索引号切片列表,并指定步幅,使我们能够控制列表并获得我们想要的输出。

使用运算符修改列表

运算符可以用于修改列表。我们将介绍使用 +* 运算符及其复合形式 +=*=

+ 运算符可用于连接两个或多个列表:

sea_creatures = ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
oceans = ['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']print(sea_creatures + oceans)
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

由于 + 运算符可以连接,因此它可用于将一个列表的项(或多个项)添加到另一个列表的末尾。记得将项放在方括号中:

sea_creatures = sea_creatures + ['yeti crab']
print(sea_creatures)
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

* 运算符可用于复制列表。也许您需要将目录中的所有文件的副本复制到服务器上,或者与朋友共享播放列表 —— 在这些情况下,您需要复制数据的集合。

让我们将 sea_creatures 列表乘以 2,将 oceans 列表乘以 3

print(sea_creatures * 2)
print(oceans * 3)
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

通过使用 * 运算符,我们可以按照指定的次数复制我们的列表。

我们还可以使用 +* 运算符的复合形式与赋值运算符 = 结合使用。+=*= 复合运算符可用于以快速和自动化的方式填充列表。您可以使用这些运算符使用占位符填充列表,稍后可以使用用户提供的输入修改这些占位符,例如。

让我们向列表 sea_creatures 添加一个以列表形式的项目。此项将作为占位符,并且我们想要多次添加此占位符项目。为此,我们将使用 += 运算符与 for 循环:

for x in range(1, 4):sea_creatures += ['fish']print(sea_creatures)
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish']
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish']
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish', 'fish']

对于循环的每次迭代,都会向原始列表 sea_creatures 添加额外的列表项 'fish'

*= 运算符的行为类似:

sharks = ['shark']for x in range(1, 4):sharks *= 2print(sharks)
['shark', 'shark']
['shark', 'shark', 'shark', 'shark']
['shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']

+* 运算符可用于连接列表和复制列表。复合运算符 +=*= 可以连接列表和复制列表,并将新的标识传递给原始列表。

从列表中删除项目

可以使用 del 语句从列表中删除项目。这将删除您在列表中指定索引号处的值。

sea_creatures 列表中删除项 'octopus'。此项位于索引位置 1。为了删除该项,我们将使用 del 语句,然后调用列表变量和该项的索引号:

sea_creatures = ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']del sea_creatures[1]
print(sea_creatures)
['shark', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

现在,索引位置 1 处的字符串 'octopus' 不再在我们的列表 sea_creatures 中。

我们还可以指定范围使用 del 语句。比方说我们想要删除不仅 'octopus' 这一项,还有 'blobfish''mantis shrimp'。我们可以使用 del 语句在 sea_creatures 中调用一个范围来实现:

sea_creatures = ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']del sea_creatures[1:4]
print(sea_creatures)
['shark', 'anemone', 'yeti crab']

通过在 del 语句中使用范围,我们能够删除索引号为 1(包括)到索引号为 4(不包括)之间的项,留下包含 3 个项的列表。

del 语句允许我们从列表数据类型中删除特定的项。

用列表项构造列表

列表可以用由列表组成的项定义,其中每个括号内的列表都包含在父列表的较大括号中:

sea_names = [['shark', 'octopus', 'squid', 'mantis shrimp'], ['Sammy', 'Jesse', 'Drew', 'Jamie']]

这些列表内的列表称为嵌套列表。

要访问此列表中的项,我们将不得不使用多个索引号:

print(sea_names[1][0])
print(sea_names[0][0])
Sammy
shark

第一个列表,因为它等同于一个项,其索引号为 0,这将是构造中的第一个数字,而第二个列表将索引号为 1。在每个内部嵌套列表中,将有单独的索引号,我们将在第二个索引号中调用它:

sea_names[0][0] = 'shark'
sea_names[0][1] = 'octopus'
sea_names[0][2] = 'squid'
sea_names[0][3] = 'mantis shrimp'sea_names[1][0] = 'Sammy'
sea_names[1][1] = 'Jesse'
sea_names[1][2] = 'Drew'
sea_names[1][3] = 'Jamie'

在处理列表的列表时,重要的是要牢记,为了访问相关嵌套列表中的特定项,您将需要引用多个索引号。

结论

列表数据类型是一种灵活的数据类型,可以在程序执行过程中进行修改。本教程介绍了列表的基本特性,包括索引、切片、修改和连接列表。从这里,您可以通过阅读 “如何使用列表方法” 了解更多有关在 Python 中使用列表的信息,并学习有关使用现有列表创建列表的 列表推导式。

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

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

相关文章

chisel入门初步1——基4的booth编码的单周期有符号乘法器实现

基4的booth编码乘法器原理说明 基2的booth编码 本质来说就是一个裂项重组,乘法器最重要的设计是改变部分积的数量,另外在考虑有符号数的情况下,最高位符号位有特别的意义。 (注:部分积是指需要最后一起加和的所有部分…

js实例继承的例子和优缺点

构造继承是一种继承方式,通过使用构造函数来实现继承。在JavaScript中,构造继承是最早的继承方式之一,但随着ES6引入了类和基于类的继承方式,构造继承的应用逐渐减少。 构造继承的优点: 简单易用:构造继承…

使用的uview 微信高版本 头像昵称填写能力

<template><view><button class"cu-btn block bg-blue margin-tb-sm lg" tap"wxGetUserInfo">一键登录</button><view><!-- 提示窗示例 --><u-popup :show"show" background-color"#fff">&…

关于C#中的async/await的理解

1. 使用async标记的方法被认为是一个异步方法&#xff0c;如果不使用await关键字&#xff0c;调用跟普通方法没有区别 static async Task Main(string[] args){Console.WriteLine("主线程id&#xff1a;" Thread.CurrentThread.ManagedThreadId);TestAwait();Consol…

翻译: Streamlit从入门到精通六 实战缓存Cache请求数据

Streamlit从入门到精通 系列&#xff1a; 翻译: Streamlit从入门到精通 基础控件 一翻译: Streamlit从入门到精通 显示图表Graphs 地图Map 主题Themes 二翻译: Streamlit从入门到精通 构建一个机器学习应用程序 三翻译: Streamlit从入门到精通 部署一个机器学习应用程序 四翻译…

从matlab的fig图像文件中提取数据

这里用的是openfig&#xff08;&#xff09;函数打开的fig文件 →→→【matlab 中 fig 数据提取】 很简洁 →→→【MATLAB提取 .fig 文件中的数据】 这个给出了包含多个曲线的情况 →→→【提取matlab fig文件里的数据和legend】 chatgpt给出的方法 打开fig文件并保存数据 我的…

StarRocks 生成列:百倍提速半结构化数据分析

半结构化分析主要是指对 MAP&#xff0c;STRUCT&#xff0c;JSON&#xff0c;ARRAY 等复杂数据类型的查询分析。这些数据类型表达能力强&#xff0c;因此被广泛应用到 OLAP 分析的各种场景中&#xff0c;但由于其实现的复杂性&#xff0c;对这些复杂类型分析将会比一般简单类型…

【单片机】改写DS2431芯片的地址码,地址ROM,DS2431芯片解密

对DS2431里面的128字节可以进行任意读写&#xff0c;方式可以看这里&#xff1a;https://blog.csdn.net/x1131230123/article/details/132248958 但DS2431芯片的地址码是光刻不可修改的&#xff0c;所以只有使用模拟芯片。 原理&#xff1a; https://www.dianyuan.com/article…

K8S Informer机制原理解读 | 架构设计

在Kubernetes系统中&#xff0c;组件之间通过HTTP协议进行通信&#xff0c;在不依赖任何中间件的情况下需要保证消息的实时性、可靠性、顺序性等。那么Kubernetes是如何做到的呢&#xff1f;答案就是Informer机制。Kubernetes的其他组件都是通过client-go的Informer机制与Kuber…

elemeentui el-table封装

elemeentui el-table封装 <template><div style"height: 100%;"><el-table ref"sneTable" element-loading-text"加载中" element-loading-spinner"el-icon-loading"element-loading-background"rgba(45,47,79…

限制API接口访问速率

文章目录 依赖注解aophelperTest 免责声明&#xff1a;本人无意侵权&#xff0c;奈何找不到原文作者&#xff0c;也找不到网址&#xff0c;于是自己记录一下&#xff0c;如果有侵权之嫌&#xff0c;请联系我删除文章 依赖 <!-- https://mvnrepository.com/artifact/com.goo…

在SpringBoot 3.2.1中使用JPA报错

在SpringBoot 3.2.1中使用JPA报错 最近在对接大模型&#xff0c;需要把机器人信息持久化到数据库&#xff0c;使用最简单的方式就是JPA了&#xff0c;所以我在pom.xml文件中引入了下面的依赖。 <dependency><groupId>org.springframework.boot</groupId>&l…

Java线程池配置由繁至简,找到适合自己的天命线程池

Java线程池配置由繁至简&#xff0c;找到适合自己的天命线程池 任务队列workQueue和饱和策略handler什么时候登场&#xff1f; 首先这里有几道经常考的线程池面试题&#xff1a; 简单介绍下线程池&#xff0c;核心数从corePoolSize 到maximumPoolSize 的变化过程&#xff1f;…

我用 ChatGPT 做了一次探索性数据分析,真的太太太实用了!

ChatGPT 经过短短1年时间的发展&#xff0c;其功能越来越强&#xff0c;现在已经是大多数企业和个人不可或缺的助手。特别是最新的 GPT-4 版本&#xff0c;专门在左边菜单栏给出了两个工具&#xff08;一个是数据分析&#xff0c;另一个是根据文字描述生成图片&#xff09;&…

教育的本质与教师发展:对能力大赛模板化现象的深度反思与批判——以快速技术迭代背景下的教学策略为审视视角

在我国当前的教育体系中&#xff0c;教师能力大赛等活动在一定程度上确实扮演了提升教师专业素养、推动教学改革的角色。它们通过竞争机制激发了教师自我提升的动力&#xff0c;并提供了一个展示教师教学才华的平台。然而&#xff0c;随着时间推移&#xff0c;此类活动却呈现出…

天拓分享:汽车零部件制造企业如何利用边缘计算网关和数网星平台实现数控机床数据采集分析

一、项目背景 某汽车零部件制造企业为了提高生产效率、降低能耗和提高产品质量&#xff0c;决定引入TDE边缘计算网关和数网星工业互联网平台&#xff0c;对数控机床进行数据采集与分析。 二、解决方案 1、设备选型与配置&#xff1a;考虑到企业生产需求和数控机床的特性&…

Opencv小项目——手势数字刷TIKTOK

​ 写在前面&#xff1a; 很久没更新了&#xff0c;之前的实习的记录也算是烂尾了&#xff0c;但是好在自己的实习记录还是有的&#xff0c;最近也忙碌了很多&#xff0c;终于放假了&#xff0c;今天下午正好没事&#xff0c;闲来无事就随便做个小玩意吧。 思来想去&#xff…

yolo9000:Better, Faster, Stronger的目标检测网络

目录 一、回顾yolov1二、yolov2详细讲解2.1 Better部分创新点&#xff08;1&#xff09;Batch Normalization(批量归一化)&#xff08;2&#xff09;High Resolution Classifier---高分辨率分类器&#xff08;3&#xff09;Anchor Boxes---锚框&#xff08;4&#xff09;Dimens…

k8s学习-Deployment

Kubernetes通过各种Controller来管理Pod的生命周期 。 为了满足不同业 务 景 &#xff0c; Kubernetes 开发了Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等多种Controller。我们⾸先学习最常用Deployment。 1.1 Kubectl命令直接创建 第一种是通过kubectl命令直接…

ROS第 9 课 编写简单的服务端 Server

文章目录 第 9 课 编写简单的服务端 Server1.创建服务器代码2.运行服务器节点 第 9 课 编写简单的服务端 Server 1.创建服务器代码 注意&#xff1a;在创建服务器代码之前&#xff0c;需要先创建工作空间和功能包&#xff0c;具体操作过程可前往目录“第4课 创建工作空间与功能…