克服字符串不可变性的“缺点”
我想改变一个特定字符串位置的值,但不幸的是
string[4] = "a"
会出现一个TypeError
错误,因为字符串是不可变的(“不支持项赋值”)。
所以我只能使用一种比较笨拙的方法
string = string[:4] + "a" + string[4:]
有没有更好的方法来做到这一点呢?
3 个回答
0
>>> from UserString import MutableString
>>> s = MutableString('abcd')
>>> s[2] = 'e'
>>> print s
abed
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
3
mystring=list("abcdef")
mystring[4]="Z"
print ''.join(mystring)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
9
在Python中,字符串是不可变的,就像数字和元组一样。这意味着你可以创建字符串、移动它们,但不能改变它们。为什么会这样呢?有几个原因(网上有更详细的讨论):
- 从设计上讲,Python中的字符串被认为是基本的、不可改变的。这促进了更好、更安全的编程风格。
- 字符串的不可变性在效率上也有好处,主要是在存储需求上更低。
- 这也使得字符串作为字典的键时更安全。
如果你在Python的相关网站上多逛逛,你会发现,关于“如何改变我的字符串”的建议中,最常见的就是“设计你的代码,使你不需要去改变它”。这倒是有道理,但还有其他选择吗?这里有几个:
- name = name[:2] + ‘G’ + name[3:] - 这是一种效率不高的方法。Python的切片语法确保在所有情况下都能正确工作(只要你的索引在范围内),但涉及到多个字符串的复制和拼接,这并不是高效代码的最佳选择。不过,如果你不太在意效率(大多数情况下你可能不在意),这也是一个不错的解决方案。
- 使用UserString模块中的MutableString类。虽然它的效率和前面的方法一样(底层实现是一样的),但在语法上更符合普通字符串的使用。
- 使用列表来存储可变数据,而不是字符串。可以通过列表和连接操作来进行转换。根据你的实际需求,ord和chr也可能会有用。
- 使用数组对象。如果你用字符串来存储一些有限的数据,比如‘二进制’字节,并且想要快速的代码,这可能是你最好的选择。
内容摘自我自己的页面,关于Python的见解 :-)