我有一个字符串:1x22x1x。我需要将所有 1 替换为 2,反之亦然。所以示例行是 2x11x2x。只是想知道它是如何完成的。我试过了
a = "1x22x1x"
b = a.replace('1', '2').replace('2', '1')
print b
输出为 1x11x1x
也许我应该忘记使用替换..?
下面是一种使用translate
字符串方法的方法:
>>> a = "1x22x1x"
>>> a.translate({ord('1'):'2', ord('2'):'1'})
'2x11x2x'
>>>
>>> # Just to explain
>>> help(str.translate)
Help on method_descriptor:
translate(...)
S.translate(table) -> str
Return a copy of the string S, where all characters have been mapped
through the given translation table, which must be a mapping of
Unicode ordinals to Unicode ordinals, strings, or None.
Unmapped characters are left untouched. Characters mapped to None
are deleted.
>>>
但是请注意,我是为 Python 3.x 编写的。在 2.x 中,您需要这样做:
>>> from string import maketrans
>>> a = "1x22x1x"
>>> a.translate(maketrans('12', '21'))
'2x11x2x'
>>>
最后,重要的是要记住该translate
方法用于将字符与其他字符互换。如果你想交换子串,你应该使用replace
Rohit Jain 演示的方法。
一种方法是使用一些临时字符串作为中间替换:
b = a.replace('1', '@temp_replace@').replace('2', '1').replace('@temp_replace@', '2')
但这可能会失败,如果您的字符串已经包含@temp_replace@
. PEP 378中也描述了这种技术
如果“来源”都是一个字符,您可以创建一个新字符串:
>>> a = "1x22x1x"
>>> replacements = {"1": "2", "2": "1"}
>>> ''.join(replacements.get(c,c) for c in a)
'2x11x2x'
IOW,使用get
接受默认参数的方法创建一个新字符串。 somedict.get(c,c)
表示类似somedict[c] if c in somedict else c
,因此如果字符在replacements
字典中,则使用关联的值,否则只需使用字符本身。