use*_*503 8 python string substring substitution
如何在Python中替换另一个字符串中的一组字符?
这是我正在尝试做的事情:假设我有一个字符串'abcdefghijkl'并且想要用A替换结束符号(k)中的2-d.我收到一个错误:
>>> aa = 'abcdefghijkl'
>>> print aa[-2]
k
>>> aa[-2]='A'
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
aa[-2]='A'
TypeError: 'str' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)
所以,问题是:是否有一种优雅的方法来替换(替换)从指定位置开始的另一个字符串中的字符串符号?就像是:
# subst(whole_string,symbols_to_substiture_with,starting_position)
>>> print aa
abcdefghijkl
>>> aa = subst(aa,'A',-2)
>>> print aa
abcdefghijAl
Run Code Online (Sandbox Code Playgroud)
什么是替代的非暴力代码?
eld*_*his 15
如果它总是与您要替换的位置相同,您可以执行以下操作:
>>> s = s[0:-2] + "A" + s[-1:]
>>> print s
abcdefghijAl
Run Code Online (Sandbox Code Playgroud)
在一般情况下,你可以这样做:
>>> rindex = -2 #Second to the last letter
>>> s = s[0:rindex] + "A" + s[rindex+1:]
>>> print s
abcdefghijAl
Run Code Online (Sandbox Code Playgroud)
编辑:非常一般的情况,如果你只是想在替换中重复一个字母:
>>> s = "abcdefghijkl"
>>> repl_str = "A"
>>> rindex = -4 #Start at 4th character from the end
>>> repl = 3 #Replace 3 characters
>>> s = s[0:rindex] + (repl_str * repl) + s[rindex+repl:]
>>> print s
abcdefghAAAl
Run Code Online (Sandbox Code Playgroud)
Man*_*dan 11
TypeError: 'str' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)
这是可以预料的 - python字符串是不可变的.
一种方法是做一些切片和切块.像这样:
>>> aa = 'abcdefghijkl'
>>> changed = aa[0:-2] + 'A' + aa[-1]
>>> print changed
abcdefghijAl
Run Code Online (Sandbox Code Playgroud)
连接的结果changed将是另一个不可变的字符串.请注意,这不是适合所有替代方案的通用解决方案.
你必须将它切片并实例化一个新的字符串,因为字符串是不可变的:
aa = aa[:-2] + 'A' + aa[-1:]
Run Code Online (Sandbox Code Playgroud)
另一种方法可以做到这一点:
s = "abcdefghijkl"
l = list( s )
l[-2] = 'A'
s = "".join( l )
Run Code Online (Sandbox Code Playgroud)
Python 中的字符串是不可变的序列——非常类似于元组。您可以从字符串或元组创建一个可变的列表,更改相关索引并使用元组构造函数将列表转换回字符串join或转换为tuple字符串。
编辑:如果是字符串,您可以使用 bytearray ( docs ) 类型而不是list,这使得可以使用构造函数转换为字符串str。
另外,您可以实现自己的或使用标准库中的此类:http://docs.python.org/library/userdict.html#UserString.MutableString,如下所示:
>>> from UserString import MutableString
>>> s = MutableString( "zdfgzbdr " )
>>> s
'zdfgzbdr '
>>> s[1:5]
'dfgz'
>>> s[1:5] = "xxxx"
>>> s
'zxxxxbdr '
Run Code Online (Sandbox Code Playgroud)
遗憾的是 -MutableString已被弃用并且在 Py3k 中不可用(我认为您仍然可以编写自己的类)。
| 归档时间: |
|
| 查看次数: |
32332 次 |
| 最近记录: |