Python基础:字符串(二)

本文介绍了Python中字符串的索引、分片机制,强调了分片的灵活性和在编程中的健壮性,以及字符串的不可变性。同时,给出了如何使用分片实现trim()函数去除字符串首尾空格的例子。
摘要由CSDN通过智能技术生成

声明!!!


笔者作为初学者,所写的一系列博客仅作为个人学习使用,记录相关知识以确保后续学习的正常开展。因受 互联网开源精神 及 奉献精神 的影响,我尽可能地让我的博客可以面向更多人,希望我的文章可以帮助到你!

如果你有更好的意见,也随时欢迎你联系我。

当笔者对博客(包括本文)内容有更深的理解或更清晰的表达时,会不定期对博客进行优化


字符串的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

注意:分片可以说是由索引组成的  所以空格也占据了一个索引

  1. 分片是半闭半开区间,即包含前面索引位置的元素,不包含后面索引位置的元素。比如:string[m:n] 获取的是字符串 string 中索引为 m 到 n-1 之间的元素(包括 m 和 n-1);
  2. 分片中前后索引的值是可以省略的,前索引省略默认为 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=''输出不换行

  • 37
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值