声明!!!
笔者作为初学者,所写的一系列博客仅作为个人学习使用,记录相关知识以确保后续学习的正常开展。因受 互联网开源精神 及 奉献精神 的影响,我尽可能地让我的博客可以面向更多人,希望我的文章可以帮助到你!
如果你有更好的意见,也随时欢迎你联系我。
当笔者对博客(包括本文)内容有更深的理解或更清晰的表达时,会不定期对博客进行优化
字符串的index
与 列表的正向反向索引 用法同理 (就近原则-哪个近用哪种)
注意 :空格也会占一个索引位置 并且输出一个空格
输出为空格 即什么都没有。
字符串的分片
拓展:
字符串和列表都为 有序序列 都可以用 len() 获取 内部的元素个数。
字符串分片 与列表的分片用法同理
字符串分片 [ 开始 , 结束 )
简单的东西 随便看看
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
注意:分片可以说是由索引组成的 所以空格也占据了一个索引
- 分片是半闭半开区间,即包含前面索引位置的元素,不包含后面索引位置的元素。比如:string[m:n] 获取的是字符串 string 中索引为 m 到 n-1 之间的元素(包括 m 和 n-1);
- 分片中前后索引的值是可以省略的,前索引省略默认为 0,后索引省略默认为序列长度。
炒鸡重点:△index和分片的超出范围问题
string = 'Hello World'
print(string[0:100000])
我们可以看见 分片明显超出了字符串的索引范围 或者说字符串的长度 但此代码并不会报错
分片超出范围是不会报错的。
你可以把字符串想象成一根绳子,分片就是用刀将绳子切分开来。在字符串长度内分片相当于在绳子上切割,而超出范围相当于一刀砍到了空气,对于绳子来说没有影响。
注意!这一点和索引取值是不同的,如果索引取值超出范围将会报错。比如将上面的第二行代码改成 print(string[100000]) 将会得到
IndexError: string index out of range(索引错误:字符串索引超出范围)的报错。
在编程中 我们会选择 使用分片来代替索引 由此来增强代码的健壮性。
字符串的不可变性
报错:TypeError: 'str' 不支持第 2 行的项目赋值
所以不可以使用字符串[index] = '新字符'的方法修改
这个类似于 元组 '被锁住' 需要list()转换为列表 '解锁'
正确操作:
我们需要 使用字符串分片和拼接去生成一个新的字符串
例如:
new_name = '鲁' + name[1:0]
新字符串 手动加入修改的内容 +拼接 原字符串分片
new_poetry = poetry1[:6] + poetry2[-6:]
新字符串 或者另外一个字符串分片 +拼接 原字符串分片
其他
(从练习中获得的相关编程思路或者问题)
一:
正反向索引可以一起用
pork = '瘦肉肥肉瘦肉瘦肉瘦肉肥肉肥肉瘦肉肥肉'
# 要“切出”中间的“瘦肉瘦肉瘦肉”哦
print(pork[4:-8]) -8为肥 但不取肥
#输出为瘦肉瘦肉瘦肉
二:
分片与字符串链接的部分没有 . 点
str[index]
str[ : ] 冒号不是逗号
三:★★★★★
要求:利用分片操作,实现一个 trim() 函数,该函数的功能是去除 字符串首尾 的所有空格,字符串中间的空格保留。如:' Hello World ' 处理成 'Hello World'。
def trim(s):
while s[:1]==' ':
s=s[1:]
★这里使用 s[:1] 不是 s[0] 的原因是索引取值超出范围会报错,而分片不会报错
while s[-1:]==' ':
s=s[:-1]
return s
注意的点:
使用[:1] 而不是s[0] 是为了避免因输入的是''而报错
区分trim中输入 '' 和 ' ' 的处理区别
1. ' '满足while循环条件 参与循环后切到空气 返回值为''
2. '' 不满足while循环条件 直接返回''
第一个while处理开头空格 后一个while处理末尾空格
对于第一个while而言 通过 持续的自循环 确保开头无空格后 将i交给第二个while。
print(trim(' Hello World'))
print(trim(' Hello World '))
输出分别为:
Hello World
Hello World
print(trim(' '))
输出为空字符串
print(trim(''))
输出为空字符串
'' 是 空字符 或 空字符串(字符串是一串字符)
' '是空格字符(只有一个字符,通常就不说字符串了)
四:
小贝正在做语文作业,但她一个不注意,把“关羽”错写成“项羽”了。
你能结合 for 循环和字符串方法,将 homework 中的 项羽 全部改正为 关羽 吗?
homework = '''提起刘备、项羽和张飞,人们总是会联想到桃园三结义的故事。
东汉末年,朝廷腐败,民不聊生。
刘备、项羽和张飞想共同干一番事业,拯救陷入水深火热之中的百姓。
三人在桃园结为异姓兄弟,风雨同舟,肝胆相照,开创了蜀汉基业。'''
方法一
for i in range(len(homework)):
if homework[i:i+1] == '项':
homework = homework[:i]+'关'+ homework[i+1:]
print(homework)
利用索引
方法二
new=''
for i in homework:
if i == '项':
i = '关'
new=new+i
print(i,end='')
利用 遍历和end=''输出不换行