1

我有一个字符串:1x22x1x。我需要将所有 1 替换为 2,反之亦然。所以示例行是 2x11x2x。只是想知道它是如何完成的。我试过了

a = "1x22x1x"
b = a.replace('1', '2').replace('2', '1')
print b

输出为 1x11x1x

也许我应该忘记使用替换..?

4

3 回答 3

5

下面是一种使用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方法用于将字符与其他字符互换。如果你想交换子串,你应该使用replaceRohit Jain 演示的方法。

于 2013-09-25T18:18:56.353 回答
1

一种方法是使用一些临时字符串作为中间替换:

b = a.replace('1', '@temp_replace@').replace('2', '1').replace('@temp_replace@', '2')

但这可能会失败,如果您的字符串已经包含@temp_replace@. PEP 378中也描述了这种技术

于 2013-09-25T18:16:10.467 回答
0

如果“来源”都是一个字符,您可以创建一个新字符串:

>>> 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字典中,则使用关联的值,否则只需使用字符本身。

于 2013-09-25T18:38:42.077 回答