python全栈开发《47.索引与切片之字符串》
1.通过切片和索引,获取字符串的字段
字符串的索引和列表的索引方式是一样的。只不过列表中,每个元素自身拥有一个索引位置。
而字符串是每一个字符拥有一个索引位置。
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函数
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
)来访问存储在内存中的数据。你可以多次使用这个变量,而不需要每次都重新计算反转。
换句话说,引用就是变量指向内存中某个对象的方式,允许你在后续代码中方便地使用该对象。