当前位置: 首页 > article >正文

python全栈开发《47.索引与切片之字符串》

1.通过切片和索引,获取字符串的字段

字符串的索引和列表的索引方式是一样的。只不过列表中,每个元素自身拥有一个索引位置。

而字符串是每一个字符拥有一个索引位置。

67bc532e9bc74a7dde12b3610d260d41.png
  • 1)字符串的索引规则与列表相同。

  • 2)字符串的切片和索引的获取与列表相同。

  • 3)字符串无法通过索引修改与删除成员。

  • 4)字符串不可修改。

name = 'dewei'
print(name[0])
print(name[:2])

运行结果:

/Users/llq/PycharmProjects/pythonlearn/pythonlearn/python_list/bin/python /Users/llq/PycharmProjects/pythonlearn/python_list/1.py 
d
de

进程已结束,退出代码为 0

切片中左边是从0开始获取,就可以不填写。而且切片是左含右不含的规则。

2.字符串的find与index函数

24574c5eec45a34f85c265057cb8f245.png

item:是希望查找索引位置的元素。

info = 'my name is dewei'
print(info.index('dewei'))
print(info.find('dewei'))

运行结果:

/Users/llq/PycharmProjects/pythonlearn/pythonlearn/python_list/bin/python /Users/llq/PycharmProjects/pythonlearn/python_list/1.py 
11
11

进程已结束,退出代码为 0

'dewei'的第一个字母d是在info字符串的第11个索引上,所以打印出结果是11。每一个空格也会占用一个位置。

3.find与index的区别

  • 1)find函数获取不到对应元素的索引位置,返回-1。

  • 2)index函数获取不到对应的索引位置,直接报错。(这一点和列表中的index函数是一致的)

info = 'my name is dewei'
print(info.find('xiaobian'))
print(info.index('xiaobian'))

运行结果:

/Users/llq/PycharmProjects/pythonlearn/pythonlearn/python_list/bin/python /Users/llq/PycharmProjects/pythonlearn/python_list/1.py 
-1
Traceback (most recent call last):
  File "/Users/llq/PycharmProjects/pythonlearn/python_list/1.py", line 3, in <module>
    print(info.index('xiaobian'))
ValueError: substring not found

进程已结束,退出代码为 1

4.代码

例1:利用索引进行反序获取字符串。

# coding:utf-8

name = 'dewei'
new_name = name[::-1]
print(new_name)
result = new_name.index('wei')
print(result)

运行结果:

/Users/llq/PycharmProjects/pythonlearn/pythonlearn/python_list/bin/python /Users/llq/PycharmProjects/pythonlearn/python_list/str_index.py 
iewed
Traceback (most recent call last):
  File "/Users/llq/PycharmProjects/pythonlearn/python_list/str_index.py", line 6, in <module>
    print( new_name.index('wei'))
ValueError: substring not found

进程已结束,退出代码为 1

例2:对python中的字符串进行反序并没有修改原字符串,因为字符串是不可变的。反序操作实际上是创建了一个新的字符串,而不是改变原有的字符串。原字符串保持不变。

s = "hello"
reversed_s = s[::-1]
print(s)          # 输出: "hello"
print(reversed_s) # 输出: "olleh"

在这个例子中,s 仍然是 "hello",而 reversed_s 是一个新的字符串 "olleh"。

这段代码修改了原来的字符串'dewei'吗?

name = 'dewei' 
print(name[::-1])

这段代码没有修改原来的字符串 'dewei'。字符串在 python 中是不可变的,所以 name[::-1] 生成一个新的字符串(iewed),但原来的字符串 name 仍然保持为 'dewei'

例3:这两段代码的区别在于是否将反转后的字符串存储在变量中。

第一段代码

name = 'dewei'
new_name = name[::-1]
print(new_name)

这里,反转后的字符串被存储在变量 new_name 中,然后打印出来。new_name 现在包含了反转后的字符串 "iewed"。

第二段代码

name = 'dewei'
print(name[::-1])

这里,反转后的字符串直接在 print() 函数中使用,没有存储在任何变量中。这会直接打印反转后的字符串 "iewed",但不会保存它。

第一段代码保存了反转后的结果,第二段代码则仅仅是打印了反转结果。 在内存上有什么区别?

在内存上的区别主要体现在变量的存储和引用上。

第一段代码

  • 创建了一个新的字符串对象 new_name,并将反转后的字符串存储在这个变量中。这意味着在内存中会保留这个字符串对象,直到 new_name 超出作用域或被删除。

  • 这样做可以在后续的代码中重复使用 new_name,不需要再次计算反转。

第二段代码

  • 直接在 print() 函数中生成反转字符串,计算后的结果并不被存储在任何变量中。每次调用 print(name[::-1]) 时,都会重新计算反转的字符串。

  • 这样在内存中不会占用额外的空间来保存反转字符串,但如果多次调用,会导致更多的计算开销。

总结:第一段代码在内存中存储了反转字符串的引用,而第二段代码则不存储,仅在需要时计算和打印。

反转字符串的“引用”是指在内存中创建一个新的字符串对象,并通过变量名来访问它。具体来说:

  • 当你执行 new_name = name[::-1] 时,new_name 变量指向一个新的字符串对象(反转后的字符串)。这个对象在内存中占据了一定的空间。

  • 引用是指通过变量名(在这里是 new_name)来访问存储在内存中的数据。你可以多次使用这个变量,而不需要每次都重新计算反转。

换句话说,引用就是变量指向内存中某个对象的方式,允许你在后续代码中方便地使用该对象。


http://www.kler.cn/news/359471.html

相关文章:

  • Django-应用及分布式路由
  • 深入解析JavaScript中的箭头函数及其在React中的应用(箭头函数与传统函数的区别、如何在不同上下文中使用箭头函数)
  • 【前端】如何制作自己的网站(7)
  • echarts设置x轴中文垂直显示,x轴滚动条
  • 随机数生成
  • React 学习计划
  • Modelsim:LPDDR5仿真(含美光仿真模型官方svvcs代码)
  • (linux驱动学习 - 12). IIC 驱动实验
  • .net framework 3.5sp1安装错误进度条不动怎么办
  • 【Python技术】利用akshare定时获取股票实时价,低于5日线钉钉通知报警
  • “第15代”英特尔CPU来袭!命名全面变更,速览
  • 如何删除Maven
  • 一文读懂什么是数据即产品(Data as a Product,DaaP)
  • 程序员如何精进
  • k8s-pod详解
  • 工业级边缘计算网关的特点及应用价值-天拓四方
  • C++|std::stoi函数
  • SpringBoot +Vue3前后端分离项目入门基础实例四
  • K8s-pod详解2
  • RabbitMQ 发布确认模式