python字符串的索引

上一篇回顾

上一关中,我们重识了 字符串,还了解了 字符串拼接 和 字符串格式化输出 的方法。

字符串的“乘法”可以很方便地“复读”字符串,让字符串与一个整数 n 相乘,字符串就会原样复制 n 次。

在体验课中我们学到,要想让数字与字符串拼接起来,就要先用 str() 函数进行类型转换,这实在有点麻烦。学完上一关后,你就知道该怎么走捷径了。

占位符 在字符串中先占上几个“坑”,我们将需要“填坑”的内容写到 元组 中,跟在 % 后面,Python 就会将这些内容依次填到占位符所在的位置。

今天我们要继续深入一些更高级的字符串操作方法,咱们一起探索吧!

字符串索引

在学列表的时候,我们知道了可以通过 索引 来访问列表里的元素,其实字符串也一样有 索引

和列表一样,我们可以通过索引或反向索引的方式访问字符串中的字符:

str = 'Hello World'
print(str[6])  # 输出:W
print(str[-5])  # 输出:W

字符串索引的原理和列表索引的原理是一样的。

正向索引是从 0 开始计数,而反向索引则是从 -1 开始计数,这一点一定要记清楚。

一般我们采取“就近原则”来决定使用正向索引还是反向索引——即访问靠前的元素用正向索引,靠后的元素用反向索引,这样就可以尽可能少地数这是第几个元素了。

编程练习

《水浒传》中,宋江为了将卢俊义逼上梁山,军师吴用巧施一计,他扮成一个算命先生,来到卢俊义庄上,口占四句卦歌,并端书在卢宅的墙壁上,巧妙地把“卢俊义反”四个字暗藏于四句之首。之后,官府拿到了证据,到处捉拿卢俊义,终于把他逼上梁山。

请你用字符串索引的知识,将这首藏头诗每一句的第一个字拼在一起,并在屏幕上打印出来。

str1 = "芦花丛中一扁舟"
str2 = "俊杰俄从此地游"
str3 = "义士若能知此理"
str4 = "反躬难逃可无忧"
print(str1 + str2 + str3 + str4)

解答后为:

str1 = "芦花丛中一扁舟"
str2 = "俊杰俄从此地游"
str3 = "义士若能知此理"
str4 = "反躬难逃可无忧"
print(str1[0] + str2[0] + str3[0] + str4[0])

# 输出为:卢俊义反

字符串分片

除了索引之外,字符串和列表还有很多相似之处:它们都是有序序列,都可以使用 len() 函数获取元素个数,当然还有本节的重点——分片。

字符串的分片和列表的分片是一样的,我们直接来看个字符串分片的例子:

str = 'Hello World'
# 下面两个效果一样
print(str[6:])  # 输出:World
print(str[-5:])  # 输出:World

字符串分片同样也可以用正向索引和反向索引,它俩的效果一样。

我们通过一些例子来回忆一下之前说过的分片操作:

string = 'Hello World'

# 从索引 0 开始,到索引 3 为止,不包括索引 3
print(string[0:3])
# 输出:Hel

# 如果第一个索引是 0,可以省略
print(string[:3])
# 输出:Hel

print(string[3:11])
# 输出:lo World

# 如果分片到末尾,后面也可以省略
print(string[3:])
# 输出:lo World

# 如果都省略,则是复制一个一样的字符串
print(string[:])
# 输出:Hello World

上面的这些例子中有两个注意点:

1、分片是半闭半开区间,即包含前面索引位置的元素,不包含后面索引位置的元素。比如:string[m:n] 获取的是字符串 string 中索引为 m 到 n-1 之间的元素(包括 m 和 n-1);

2、分片中前后索引的值是可以省略的,前索引省略默认为 0,后索引省略默认为序列长度。

你可能会有疑问:分片包含前面索引位置的元素却不包含后面索引位置的元素,为什么不都包含或都不包含呢?这样不是更好记吗?

举个例子你就明白了:有个字符串 string 的值为 'Hello World',我们假设分片两个索引位置的元素是都包含的,这时要用分片获取 string 前三个元素则应写作 string[:2]

同样是获取索引为 0、1、2 的三个元素,不包含后面索引位置的元素写作 string[:3]。不包含后面索引位置元素的写法是不是更符合直觉?

获取前三个元素写作 string[:3],获取后三个元素写作 string[-3:]。正向索引常用于获取靠前的元素,反向索引常用于获取靠后的元素。这两个例子是不是很清晰地展现了正向索引和反向索引的适用场景?

关于分片我最后还想再讲一个小知识点,我们先来看段代码,你猜猜运行结果是什么:

string = 'Hello World'
print(string[0:100000])

答案是:Hello World。有些同学可能认为上面代码会报错,因为后面索引超出了字符串本身的长度。

其实不然,分片超出范围是不会报错的。你可以把字符串想象成一根绳子,分片就是用刀将绳子切分开来。在字符串长度内分片相当于在绳子上切割,而超出范围相当于一刀砍到了空气,对于绳子来说没有影响。

注意!这一点和索引取值是不同的,如果索引取值超出范围将会报错。比如将上面的第二行代码改成 print(string[100000]) 将会得到 IndexError: string index out of range(索引错误:字符串索引超出范围)的报错。

稍稍剧透一下,本关的上机作业将会用到这个知识点,到时候不要忘记哦~

提示:上述字符串分片的知识对列表、元组分片同样适用。

编程练习

小贝去菜市场买菜,她选中了一块猪肉,但是肥瘦相间。小贝只想要中间的瘦肉,你能帮她“切出瘦肉”吗?

pork = '瘦肉肥肉瘦肉瘦肉瘦肉肥肉肥肉瘦肉肥肉'

切片后:

pork = '瘦肉肥肉瘦肉瘦肉瘦肉肥肉肥肉瘦肉肥肉'
# 要“切出”中间的“瘦肉瘦肉瘦肉”哦
print(pork[4:-8])

字符串不可变性

在讲列表中的索引时,我们说过可以通过索引来改变列表中元素的内容,比如:

names = ['鲁班七号', '蔡文姬', '甄姬', '亚瑟', '兰陵王']
names[0] = '后裔'
print(names)
# 输出:['后裔', '蔡文姬', '甄姬', '亚瑟', '兰陵王']

但字符串一旦创建后是不可改变的,这个属性和元组类似,通过索引来改变字符串中元素就会报错:

name = '鹿班七号'
name[0] = '鲁'
print(name)
# 报错:TypeError: 'str' does not support item assignment on line 2

那么我们怎样才能修改字符串的内容呢?答案是使用字符串分片和拼接去生成一个新的字符串,看个例子:

name = '鹿班七号'
new_name = '鲁' + name[1:]
print(new_name)
# 输出:鲁班七号

编程练习

古代诗词讲究押韵,现代的说唱也讲究单押、双押等。自挂东南枝 和很多别的诗句搭配读起来也朗朗上口,十分押韵。

我们来试试将 空山新雨后,天气晚来秋。 的前半句和 徘徊庭树下,自挂东南枝。 的后半句结合起来,打印出来读读看吧!

poetry1 = '空山新雨后,天气晚来秋。'
poetry2 = '徘徊庭树下,自挂东南枝。'
print(poetry1[:6] + poetry2[6:])

# 输出为:空山新雨后,自挂东南枝。

讨厌的错别字

小贝正在做语文作业,但她一个不注意,把“关羽”错写成“项羽”了。

你能结合 for 循环和字符串方法,将 homework 中的 项羽 全部改正为 关羽 吗?

homework = '''提起刘备、项羽和张飞,人们总是会联想到桃园三结义的故事。
东汉末年,朝廷腐败,民不聊生。
刘备、项羽和张飞想共同干一番事业,拯救陷入水深火热之中的百姓。
三人在桃园结为异姓兄弟,风雨同舟,肝胆相照,开创了蜀汉基业。'''

# 请补充代码

print(homework)

补充后的代码为:

homework = '''提起刘备、项羽和张飞,人们总是会联想到桃园三结义的故事。
东汉末年,朝廷腐败,民不聊生。
刘备、项羽和张飞想共同干一番事业,拯救陷入水深火热之中的百姓。
三人在桃园结为异姓兄弟,风雨同舟,肝胆相照,开创了蜀汉基业。'''

for i in range(len(homework)):
  if homework[i:i+2] == '项羽':
    homework = homework[:i] + '关羽' + homework[i+2:]
print(homework)

下集预告:

Python 中内置了很多实用的字符串方法,能够让你用一行代码搞定各种复杂的难题。

英文字母大小写互换,自由分割与拼合,查找指定字符串……你想怎么做,Python 都能满足你。

除了实用的内置方法外,我们还会接触到一种新的 格式化输出方法,之前学过的占位符和新方法比起来,哪个更方便呢?学了就知道!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式Linux系统编程 — 1.2 文件管理与错误处理

目录 1 Linux 系统如何管理文件 1.1 什么是静态文件 1.2 扇区(Sector)和块(Block)概念? 1.3 inode 1.4 进程控制块(PCB) 2 返回错误处理与 errno 2.1 errno变量介绍 2.3 perror函数介绍…

python-验证子串

题目描述 输入两个字符串,验证其中一个串是否为另一个串的子串。 输入两个字符串, 每个字符串占一行,长度不超过200且不含空格。 输出 若第一个串s1是第二个串s2的子串,则输出(s1) is substring of(s2)否则,若第二个串…

【云原生】kubernetes中secret原理详解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

LayUI的暗淡:错误的押宝了前后端不分离

LayUI是一个不错的中后台UI框架,贝格前端工场用的CMS就是基于layUI的,可以说简单轻便。除此之外,贝格前端工场很少接到客户要求升级LayUI界面,或者采用LayUI框架的。 一、LayUI官网的谢幕,吹起了前后端不分离模式没落…

拓扑排序详解

目录 一、拓扑排序前置知识 1.1 定义: 1.2 AOV网: 二、如何拓扑排序 2.1 运用 kahn 算法: 2.2 实现拓扑排序: 2.3 拓扑排序的应用: 2.4 拓扑排序编写模板: 三、例题练习 3.1 例题1:课…

浙江大爱遮阳新材料股份有限公司新品发布会圆满成功

5月29日,浙江大爱遮阳新材料股份有限公司新品发布会在上海国家会展中心举办。本次会议出席的嘉宾有浙江大爱遮阳新材料股份有限公司总经理俞彬军,常务副总王志华,上海大爱益可美遮阳科技有限公司总经理陆俊青,浙江大爱遮阳新材料股份有限公司销售经理平鸿烈,销售经理蒋扬锋和玛…

【Python】轻松打包:CentOS7上使用PyInstaller将Shell脚本转换为可执行文件的完美指南

【Python】轻松打包:CentOS7上使用PyInstaller将Shell脚本转换为可执行文件的完美指南 大家好 我是寸铁👊 总结了一篇【Python】轻松打包:CentOS7上使用PyInstaller将Shell脚本转换为可执行文件的完美指南✨ 喜欢的小伙伴可以点点关注 &#…

C# 生成解决方案时出现的一些异常及解决方法

一、ResolveAssemblyReference任务意外失败 在使用VS2022生成C#解决方案时,出现如下错误: 解决方法: 项目的依赖项出现问题,重新更新一下依赖项即可 二、生成Win32资源时出错 产生这个原因的主要原因是配置的应用程序的图标文…

Thesios: Synthesizing Accurate Counterfactual I/O Traces from I/O Samples——论文泛读

ASPLOS 2024 Paper 论文阅读笔记整理 问题 在设计大规模分布式存储系统时,I/O活动的建模至关重要。具有代表性的/O跟踪,可以对现有硬件、配置和策略进行详细的性能评估。假设跟踪进一步支持分析假设情况,例如部署新的存储硬件、更改配置和修…

【机器学习】机器学习在深度学习领域中的作用:半监督学习的视角

👀时空之门👀 🔍引言🎈半监督学习概述🚝机器学习在深度学习领域中的作用☘特征提取与表示学习🍀复杂任务建模❀结合半监督学习提升性能 🚀半监督学习在深度学习中的应用场景📕图像识…

使用import语句导入模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 创建模块后,就可以在其他程序中使用该模块了。要使用模块需要先以模块的形式加载模块中的代码,这可以使用import语句实现。im…

智能体应用开发:构建各类垂直领域的ai智能体应用

最近在做个类似的项目,有用到这方面的知识,顺便做一些记录和笔记吧,希望能帮到大家了解智能体应用开发 目录 引言 AI原生应用的兴起 智能体在AI中的角色 实现原理详解 机器学习基础 数据管理与关联数据库 数据结构 Embedding 检索方…

CSS - 元素竖向百分比的基准值是什么?

例如有一个外层DIV元素,设定width为500px,height为300px。然后在其内部添加一个DIV元素,这个时候,内部的DIV元素,如果设定height margin-top padding-top 百分比之后,他们的百分比基准值是什么呢&#xff1…

基于JSP的母婴用品网站系统

你好呀,我是计算机学长猫哥!如果有需求可以文末加我。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:IDEA/Eclipse、Navicat、Maven 系统展示 首页 管理员功能界面 用户功能界面 前台首页功能界面 …

2024-6-4 石群电路-23

2024-6-4,星期二,13:16,天气:晴,心情:晴。今天又是阳光明媚的一天,没有什么特别的事情发生,加油学习喽~ 今日观看了石群老师电路课程的第39和第40个视频,继续第九章的学…

C语言笔记23 •文件操作•

1.为什么要使用文件? 文件,顾名思义就是存储我们所写在电脑上的文本内容。如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失 了,等再次运⾏程序&#x…

视频如何转换成音频?音视频转换,4个方法

在当今数字化时代,我们常常需要处理各种不同格式的音视频文件。可能您有一个视频文件,但是您需要它的音频部分,或者您有一个音频文件,但您希望将其转换为视频格式。 无论您的需求是什么,音视频转换已经成为我们数字生…

人脸识别系统之动态人脸识别

二.动态人脸识别 1.摄像头人脸识别 1.1.导入资源包 import dlib import cv2 import face_recognition from PIL import Image, ImageTk import tkinter as tk import os注:这些导入语句允许您在代码中使用这些库和模块提供的功能,例如创建…

联邦学习数据集划分Dirichlet划分法及其可视化

文章目录 前言图片效果:独立同分布效果非独立同分布效果 一、参数输入输出 二、代码可视化:标签划分:代码调用 前言 用于实现并控制联邦学习客户端之间数据集非独立同分布,并将效果可视化 图片效果: 独立同分布效果 对不同类别…

python中的循环控制语句break与continue

学习这两个语句之前,我们要先了解这两个语句是什么意思: break:中断、打破的意思。所以它的跳出循环的意思 continue:继续的意思,意思是跳过当前条件,继续循环 新需求来了!我们不仅要告诉 Py…