列表已经有一个用于索引的 insert() 方法:
>>> someList = [1, 2, 4, 5]
>>> someList
[1, 2, 4, 5]
>>> someList.insert(2, 3)
>>> someList
[1, 2, 3, 4, 5]
如果字符串也有索引,为什么不为它们也提供一个 insert() 方法呢?示例如下:
>>> someString = 'foobar'
>>> someString.insert(3, 'SPAM')
>>> someString
'fooSPAMbar'
请您参考如下方法:
简短回答:因为字符串是不可变的。
Python 中的每种类型要么是可变的(如列表、字典或普通对象),要么是不可变的(如元组、字符串、整数...)。
这就是为什么您可以在列表中追加、弹出和插入,但不能在元组中添加。 当你做这样的事情时:
a = "this"
a = a + "that"
a 似乎已经“改变”为“thisthat”,但实际上,名称a 只是指向一个新的字符串。如果您将某些东西交给函数并尝试在函数中修改它,您可以观察到这种效果:可变类型也会在外部发生变化(尽管您通常应该避免这些副作用),而不可变类型则不会:
a = 3
b = [3]
def change_a(something):
something = 4
def change_b(something):
something[0] = 4
change_a(a)
change_b(b)
print(a,b) # prints "3 4"
如果您需要改变字符串,您可能需要查看 StringIO对于 Python 2,或 io.StringIO对于 Python 3,分别为:
import io
def insert(s,where,what):
whatlen=len(what)
s.seek(0)
cur=len(s.read())
if cur < where:
raise IndexError("Can't insert at position {}: Index out of bounds"
.format(where))
s.seek(where)
r=s.read()
s.seek(where+whatlen)
s.write(r)
s.seek(where)
s.write(what)
s = io.StringIO("This is a test")
insert(s,5,"hello")
s.seek(0)
print(s.read()) #prints "This hellois a test"
