Python3 索引下标及切片完全指南

介绍

Python 字符串数据类型是由一个或多个字符组成的序列,可以包含字母、数字、空格字符或符号。由于字符串是一个序列,我们可以通过索引和切片的方式访问它,就像访问其他基于序列的数据类型一样。

本教程将指导您通过索引访问字符串,通过字符序列切片字符串,并介绍一些计数和字符定位方法。

如何索引字符串

与列表数据类型一样,其中的项目对应一个索引号,字符串的每个字符也对应一个索引号,从索引号0开始。

对于字符串 Sammy Shark!,索引分布如下:

SammyShark!
01234567891011

可以看到,第一个 S 从索引0开始,字符串以 ! 符号的索引11结束。

我们还注意到 SammyShark 之间的空格字符也对应着它自己的索引号。在这种情况下,与空格相关联的索引号为5。

叹号 (!) 也有与之相关联的索引号。任何其他符号或标点符号,如 *#$&.;?,也是字符,并与它自己的索引号相关联。

Python字符串中的每个字符都有一个相应的索引号,这使得我们可以以与其他序列数据类型相同的方式访问和操作字符串。

通过正索引号访问字符

通过引用索引号,我们可以隔离字符串中的一个字符。我们通过将索引号放在方括号中来实现这一点。让我们声明一个字符串,打印它,并调用方括号中的索引号:

ss = "Sammy Shark!"
print(ss[4])
[secondary_label Output]
y

当我们引用字符串 ss = "Sammy Shark!" 的索引号4时,Python将返回在该位置的字符。由于字母 y 在字符串中的索引号为4,因此当我们打印 ss[4] 时,输出将是 y

索引号允许我们访问字符串中的特定字符。

通过负索引号访问字符

如果我们有一个很长的字符串,我们想要定位末尾的某个项目,我们还可以从字符串的末尾开始倒数,从索引号 -1 开始。

对于相同的字符串 Sammy Shark!,负索引号的分布如下:

SammyShark!
-12-11-10-9-8-7-6-5-4-3-2-1

通过使用负索引号,我们可以打印出字符 r,通过引用其在索引 -3 处的位置,如下:

print(ss[-3])
r

使用负索引号对于隔离长字符串末尾的单个字符非常有优势。

切片字符串

我们还可以从字符串中调用一系列字符。假设我们只想打印单词 Shark。我们可以通过创建一个切片来实现,切片是原始字符串中的一系列字符。使用切片,我们可以通过创建由冒号 [x:y] 分隔的索引号范围,调用多个字符值:

print(ss[6:11])
Shark

在构建切片时,比如 [6:11],第一个索引号是切片的起始位置(包括),第二个索引号是切片的结束位置(不包括)。这就是为什么在我们上面的例子中范围必须是字符串结束后的索引号的原因。

在切片字符串时,我们创建了一个子字符串,它本质上是存在于另一个字符串中的字符串。当我们调用 ss[6:11] 时,我们实际上是在字符串 Sammy Shark! 中调用子字符串 Shark

如果我们想要包含字符串的任一端,我们可以省略 string[n:n] 语法中的一个数字。例如,如果我们想要打印字符串 ss 的第一个单词 - “Sammy” - 我们可以通过键入以下方式实现:

print(ss[:5])
Sammy

我们通过省略切片语法中冒号前面的索引号,并仅包括冒号后面的索引号,这是对子字符串末尾的引用。

要打印从字符串中间开始并打印到末尾的子字符串,我们可以通过仅包括冒号前面的索引号来实现,如下所示:

print(ss[7:])
hark!

通过仅包括冒号前面的索引号,并在语法中留出第二个索引号,子字符串将从所调用索引号的字符开始一直到字符串的末尾。

您还可以使用负索引号切片字符串。正如我们之前所讨论的,字符串的负索引号从 -1 开始,并向字符串的开始递减。在使用负索引号时,我们将从字符串开头开始的较小数字作为第一个索引号。

让我们使用两个负索引号来切片字符串 ss

print(ss[-4:-1])
ark

子字符串 “ark” 是从字符串 “Sammy Shark!” 中打印出来的,因为字符 “a” 位于索引号 -4 的位置,而字符 “k” 位于索引号 -1 之前的位置。

在切片字符串时指定步长

切片字符串可以接受除两个索引号之外的第三个参数。第三个参数指定步长,指的是在从字符串中检索第一个字符之后移动多少个字符。到目前为止,我们省略了步长参数,Python 默认步长为 1,因此会检索两个索引号之间的每个字符。

让我们回顾一下上面打印子字符串 “Shark”的示例:

print(ss[6:11])
Shark

通过包含步长为 1 的第三个参数,我们可以获得相同的结果:

print(ss[6:11:1])
Shark

因此,步长为 1 将获取两个索引号之间的每个字符。如果省略步长参数,则 Python 将默认为 1。

如果我们增加步长,我们会看到字符被跳过:

print(ss[0:12:2])
SmySak

在 Python 语法 ss[0:12:2] 中,指定步长为 2 跳过每个其他字符。让我们回顾一下被突出显示的字符:

在这里插入图片描述

请注意,索引号 5 处的空格字符也会在步长为 2 时被跳过。

如果我们使用较大的数字作为步长参数,我们将获得一个显着较小的子字符串:

print(ss[0:12:4])
Sya

在 Python 语法 ss[0:12:4] 中,指定步长为 4 将只打印每四个字符一次。再次看一下突出显示的字符:

x

在此示例中,空格字符也在步长为 4 时被跳过。

由于我们打印整个字符串,我们可以省略两个索引号,并在语法中保留两个冒号以获得相同的结果:

print(ss[::4])
Sya

省略两个索引号并保留冒号将保持整个字符串在范围内,同时在最后的参数中添加步长将指定要跳过的字符数。

此外,您还可以为步长指定负数值,通过将步长设置为 -1,我们可以使用负步长打印出原始字符串的反向顺序:

print(ss[::-1])
!krahS ymmaS

没有指定参数的两个冒号将包括原始字符串的所有字符,步长为 1 将包括所有字符而不跳过,而否定步长将颠倒字符的顺序。

让我们再来一个步长为 -2 的例子:

print(ss[::-2])
!rh ma

在这个例子中,ss[::-2],我们处理原始字符串的全部,因为参数中未包含索引号,并通过负步长反转字符串。此外,通过将步长设置为 -2,我们跳过反转字符串的每隔一个字母:

x

在这个例子中,空格字符也被打印。

通过指定 Python 切片语法的第三个参数,您可以指定要从原始字符串中提取的子字符串的步长。

计数方法

当我们考虑与字符串中的字符对应的相关索引号时,了解一些计数字符串或返回索引号的方法是值得的。这对于限制我们希望在用户输入表单中接受的字符数或比较字符串非常有用。与其他序列数据类型一样,字符串可以通过多种方法进行计数。

首先,我们将看一下 len() 方法,该方法可以获取任何有序或无序数据类型的长度,包括字符串、列表、元组和字典。

让我们打印字符串 ss 的长度:

print(len(ss))
12

字符串 “Sammy Shark!” 的长度为12个字符,包括空格字符和叹号符号。

我们也可以直接将字符串传递到 len() 方法中:

print(len("Let's print the length of this string."))
38

len() 方法计算字符串中的字符总数。

如果我们想要计算字符串中一个特定字符或字符序列出现的次数,我们可以使用 str.count() 方法。让我们使用我们的字符串 ss = "Sammy Shark!" 并计算字符 “a” 出现的次数:

print```python
(ss.count("a"))
2

我们可以搜索另一个字符:

print(ss.count("s"))
0

尽管字母 “S” 存在于字符串中,但重要的是要记住每个字符是大小写敏感的。如果我们想要搜索字符串中的所有字母而不考虑大小写,我们可以使用 str.lower() 方法将字符串转换为全小写。

让我们尝试使用字符序列 likesstr.count()

likes = "Sammy likes to swim in the ocean, likes to spin up servers, and likes to smile."
print(likes.count("likes"))
3

在字符串 likes 中,等效于 “likes” 的字符序列在原始字符串中出现了3次。

我们还可以找出字符或字符序列在字符串中的位置。我们可以使用 str.find() 方法来实现这一点,它将根据索引号返回字符的位置。

我们可以查看字符串 ss 中第一个 “m” 的位置:

print(ss.find("m"))
2

字符串 “Sammy Shark!” 中字符 “m” 的第一个位置是索引号2。

让我们看一下字符串 likes 中第一个字符序列 “likes” 的位置:

print(likes.find("likes"))
6

字符序列 “likes” 的第一次出现位置是在索引号位置6,这是序列 likes 的字符 l 的位置。

如果我们想要查看第二个 “likes” 序列的开始位置,我们可以通过向 str.find() 方法传递第二个参数来指定从特定索引号开始。因此,我们不是从字符串的开头开始,而是从索引号9开始:

print(likes.find("likes", 9))
34

在这第二个例子中,从索引号9开始,字符序列 “likes” 的第一个出现位置是在索引号34。

此外,我们还可以指定范围的结束作为第三个参数。与切片一样,我们可以通过使用负索引号以逆序计数来进行反向计数:

print(likes.find("likes", 40, -6))
64

此示例中的最后一个参数在索引号40和-6之间搜索序列 “likes”的位置。由于输入的最后一个参数是负数,它将从原始字符串的末尾开始计数。

len()str.count()str.find() 的字符串方法可用于确定字符串的长度、字符或字符序列的计数以及字符或字符序列在字符串中的索引位置。

结论

能够调用字符串的特定索引号,或者调用字符串的特定切片,使我们在处理此数据类型时具有更大的灵活性。因为字符串、列表和元组等都是基于序列的数据类型,所以可以通过索引和切片进行访问。

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

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

相关文章

23111 网络编程 day2

思维导图 重打代码 #include<myhead.h> #define SER_IP "192.168.122.150" //服务器ip #define SER_PORT 8888 //服务器端口int main(int argc, const char *argv[]) {//1.创建用于连接的套接字int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd-1){perror("…

pytorch集智-5手写数字识别器-卷积神经网络

1 简介 简称&#xff1a;CNN&#xff0c;convolutional neural network 应用场景&#xff1a;图像识别与分类&#xff08;CNN&#xff09;&#xff0c;看图说话&#xff08;CNNRNN&#xff09;等 优越性&#xff1a;和多层感知机相比&#xff0c;cnn可以识别独特的模式&…

前端框架前置课Node.js学习(1) fs,path,模块化,CommonJS标准,ECMAScript标准,包

目录 什么是Node.js 定义 作用: 什么是前端工程化 Node.js为何能执行Js fs模块-读写文件 模块 语法: 1.加载fs模块对象 2.写入文件内容 3.读取文件内容 Path模块-路径处理 为什么要使用path模块 语法 URL中的端口号 http模块-创建Web服务 需求 步骤: 案例:浏…

[笔记]深度学习入门 基于Python的理论与实现(二)

2. 感知机 感知机(perceptron)是由美国学者 Frank Rosenblatt 在 1957 年提出的。它作为神经网络&#xff08;深度学习&#xff09;的起源的算法&#xff0c;是学习神经网络和深度学习的重要一环 严格地说&#xff0c;本章所说的感知机应该称为‘人工神经元’或‘朴素感知机’&…

Qt6入门教程 6:Qt元对象系统

目录 一.什么是Qt元对象系统&#xff1f; 二.编译时Qt Creator偷摸做了哪些事情&#xff1f; 1.uic 2.rcc 3.moc 一.什么是Qt元对象系统&#xff1f; Qt中的元对象系统&#xff08;Meta-Object System&#xff09;提供了对象间通信的信号和槽机制、运行时类型信息和动态属…

ArcGIS Pro 拓扑编辑和常见一些拓扑错误处理

7.4 拓扑编辑 拓扑编辑也叫共享编辑&#xff0c;多个数据修改时&#xff0c;一块修改&#xff0c;如使用数据&#xff1a;chp7\拓扑检查.gdb,数据集DS下JZX、JZD和DK&#xff0c;加载地图框中&#xff0c;在“地图”选项卡下选择“地图拓扑”或“ds_Topology(地理数据库)”&…

基于Redis+Lua的分布式限流

本文已收录至我的个人网站&#xff1a;程序员波特&#xff0c;主要记录Java相关技术系列教程&#xff0c;共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源&#xff0c;让想要学习的你&#xff0c;不再迷茫。 前面我们了解了如何利用Nginx做网关层限流&#xf…

SpringAMQP的使用

1. 简介&#xff1a; SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。 SpringAmqp的官方地址&#xff1a;https://spring.io/projects/spring-amqp SpringAMQP提供了三个功能&#xff1a; 自动声…

【C语言】指针知识点笔记(2)

目录 一、野指针 二、assert断言 三、指针的使用和传址调用 四、数组名的理解 五、使用指针访问数组 一、野指针 二、assert断言 三、指针的使用和传址调用 四、数组名的理解 五、使用指针访问数组

Java中的异常处理

目录 前言&#xff1a; 异常简介&#xff1a; Error类&#xff1a; Exception类&#xff1a; Exception异常&#xff1a; 运行异常&#xff1a; 编译异常&#xff1a; throw和throws关键字&#xff1a; throw: throws: try-catch关键字&#xff1a; finally: 为…

编译 FastDFS 时报错 fatal error: sf/sf_global.h: No such file or directory 解决办法

编译 FastDFS 时&#xff0c;报错如下 gcc -Wall -D_FILE_OFFSET_BITS64 -D_GNU_SOURCE -g -O1 -DDEBUG_FLAG -c -o ../common/fdfs_global.o ../common/fdfs_global.c -I../common -I/usr/local/include In file included from ../common/fdfs_global.c:21:0: ../common/fdf…

教你用五步让千年的兵马俑跳上现代的科目三?

以下是一张我上月去西安拍的兵马俑照片&#xff1a; 使用通义千问&#xff0c;5步就能它舞动起来&#xff0c;跳上现在流行的“科目三”舞蹈。 千年兵马俑跳上科目三 全民舞王 第1步 打开通义千问App&#xff0c;我使用的是华为手机&#xff0c;苹果版的没试&#xff1b; 在…

OpenCV-22高斯滤波

一、高斯函数的基础 要理解高斯滤波首先要直到什么是高斯函数&#xff0c;高斯函数是符合高斯分布的&#xff08;也叫正态分布&#xff09;的数据的概率密度函数。 高斯函数的特点是以x轴某一点&#xff08;这一点称为均值&#xff09;为对称轴&#xff0c;越靠近中心数据发生…

单例模式实现最好的方式即枚举实现

单例类作为23种设计模式当中最常用的设计模式&#xff0c;实现方式有很多种&#xff0c;比较流行的是DCL(DoubleCheckLock)双重检查的实现&#xff0c;线程安全&#xff0c;又比较好&#xff0c;除了存在序列化的问题之外&#xff0c;还算不错&#xff0c;如果对DCL模式还不熟悉…

U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig

在上一节中&#xff0c;我们介绍了U-Boot编译和.config配置文件生成分析&#xff0c;我们可以通过make xxx__defconfig来进行一些配置&#xff0c;其中xxx__defconfig对应config目录下的基于不同开发板的一些配置&#xff0c;指令执行完后会根据对应的配置在根目录下生成一个.c…

排序算法6---快速排序(非递归)(C)

回顾递归的快速排序&#xff0c;都是先找到key中间值&#xff0c;然后递归左区间&#xff0c;右区间。 那么是否可以实现非递归的快排呢&#xff1f;答案是对的&#xff0c;这里需要借助数据结构的栈。将右区间左区间压栈&#xff08;后进先出&#xff09;&#xff0c;然后取出…

详细讲解Python连接Mysql的基本操作

目录 前言1. mysql.connector2. pymysql 前言 连接Mysql一般有几种方法&#xff0c;主要讲解mysql.connector以及pymysql的连接 后续如果用到其他库还会持续总结&#xff01; 对于数据库中的表格,本人设计如下:(为了配合下面的操作) 1. mysql.connector mysql.connector 是一…

C#,入门教程(19)——循环语句(for,while,foreach)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(18)——分支语句&#xff08;switch-case&#xff09;的基础知识https://blog.csdn.net/beijinghorn/article/details/124039953 一、for循环 当老师进入教室&#xff0c;从门口开始分别按行、列点名&#xff0c;看看哪位翘课&…

Xcode15 升级问题记录

这里写自定义目录标题 新版本Xcode15升级问题1&#xff1a;rsync error: some files could not be transferred (code 23) at ...参考 新版本Xcode15升级 下载地址&#xff1a;https://developer.apple.com/download/all/ 我目前使用的版本是Xcode15.2 我新创建了一个项目&…

transfomer中Decoder和Encoder的base_layer的源码实现

简介 Encoder和Decoder共同组成transfomer,分别对应图中左右浅绿色框内的部分. Encoder&#xff1a; 目的&#xff1a;将输入的特征图转换为一系列自注意力的输出。 工作原理&#xff1a;首先&#xff0c;通过卷积神经网络&#xff08;CNN&#xff09;提取输入图像的特征。然…