为什么调用字符串方法(例如 .replace 或 .strip)不会修改(变异)字符串?
- 2024-11-19 08:38:00
- admin 原创
- 9
问题描述:
我编写了这个 Python 程序来做一个简单的字符串替换:
X = "hello world"
X.replace("hello", "goodbye")
执行此操作后, 的值X
是"hello world"
。为什么没有变为"goodbye world"
呢?
解决方案 1:
这是因为字符串在 Python 中是不可变的。
这意味着X.replace("hello","goodbye")
将返回已替换的副本X
。因此,您需要替换此行:
X.replace("hello", "goodbye")
用这一行:
X = X.replace("hello", "goodbye")
更广泛地说,这适用于所有改变字符串内容的 Python 字符串方法,例如replace
,,,/ ,,...strip
`translatelower
upper`join
如果你想使用它们的输出而不是扔掉它,你必须将它分配给某个东西,例如
X = X.strip(' ')
X2 = X.translate(...)
Y = X.lower()
Z = X.upper()
A = X.join(':')
B = X.capitalize()
C = X.casefold()
等等。
解决方案 2:
所有字符串函数,如lower
、upper
,strip
都返回一个字符串而不修改原始字符串。如果您尝试修改字符串(如您所想)well it is an iterable
,它将失败。
x = 'hello'
x[0] = 'i' #'str' object does not support item assignment
有一篇很好的文章介绍了字符串不可变的重要性:为什么 Python 字符串是不可变的?使用它们的最佳实践
解决方案 3:
如果您想稍微尝试一下以更好地了解这些东西是如何工作的,您可以找到新的方法来替换字符串,而无需使用“替换”功能。
喜欢:
X = "hello world"
# X.replace("hello", "goodbye")
X1 = "goodbye" + X[X.find(" "):]
X2 = "goodbye" + X.split("hello")[1]
X3 = "goodbye" + X[len("hello"):]
X4 = lambda y: "goodbye" + y[y.find(" "):]
X5 = lambda y: j(y)
def j(y):
for i in range(0, len(y)):
if y[i] == " ":
return "goodbye" + y[i:]
print(X1)
print(X2)
print(X3)
print(X4(X))
print(X5(X))
它们都使用不同的方式给出与上述替换相同的结果。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD