Python 相互替换字符串内容
我有一个字符串:1x2x1x。 我需要替换所有1到2,反之亦然。所以示例行是2x11x2x。只是想知道是怎么做的。我试过了Python 相互替换字符串内容,python,replace,Python,Replace,我有一个字符串:1x2x1x。 我需要替换所有1到2,反之亦然。所以示例行是2x11x2x。只是想知道是怎么做的。我试过了 a = "1x22x1x" b = a.replace('1', '2').replace('2', '1') print b 输出为1x1x 也许我应该忘记使用replace..?一种方法是使用某个临时字符串作为中间替换: b = a.replace('1', '@temp_replace@').replace('2', '1').replace('@temp_repl
a = "1x22x1x"
b = a.replace('1', '2').replace('2', '1')
print b
输出为1x1x
也许我应该忘记使用replace..?一种方法是使用某个临时字符串作为中间替换:
b = a.replace('1', '@temp_replace@').replace('2', '1').replace('@temp_replace@', '2')
但如果字符串已经包含
@temp\u replace@
,则此操作可能会失败。该技术也在中描述。一种方法是使用某个临时字符串作为中间替换:
b = a.replace('1', '@temp_replace@').replace('2', '1').replace('@temp_replace@', '2')
但如果字符串已经包含
@temp\u replace@
,则此操作可能会失败。这项技术在中也有介绍。这里有一种使用字符串的翻译方法的方法:
>>> 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.
>>>
但是请注意,我是为Python3.x编写的。在2.x中,您需要执行以下操作:
>>> from string import maketrans
>>> a = "1x22x1x"
>>> a.translate(maketrans('12', '21'))
'2x11x2x'
>>>
最后,重要的是要记住,translate
方法用于将字符与其他字符交换。如果要交换子字符串,应使用Rohit Jain演示的replace
方法。以下是使用字符串的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.
>>>
但是请注意,我是为Python3.x编写的。在2.x中,您需要执行以下操作:
>>> from string import maketrans
>>> a = "1x22x1x"
>>> a.translate(maketrans('12', '21'))
'2x11x2x'
>>>
最后,重要的是要记住,translate
方法用于将字符与其他字符交换。如果要交换子字符串,应使用Rohit Jain演示的replace
方法。如果“源”都是一个字符,则可以创建一个新字符串:
>>> a = "1x22x1x"
>>> replacements = {"1": "2", "2": "1"}
>>> ''.join(replacements.get(c,c) for c in a)
'2x11x2x'
下面,使用接受默认参数的get
方法创建一个新字符串somedict.get(c,c)
的意思类似于somedict[c]如果c在somedict else c
中,那么如果字符在replacements
字典中,则使用关联值,否则只需使用字符本身。如果“源”都是一个字符,则可以创建一个新字符串:
>>> a = "1x22x1x"
>>> replacements = {"1": "2", "2": "1"}
>>> ''.join(replacements.get(c,c) for c in a)
'2x11x2x'
下面,使用接受默认参数的get
方法创建一个新字符串somedict.get(c,c)
的意思类似于somedict[c]如果c在somedict else c
中,那么如果字符在replacements
字典中,则使用关联值,否则只需使用字符本身。是的,这几乎没问题。输出给了我@temp_replacex11x@temp_replacex
。所以仍然需要做一些事情。@Waldema。你确定你得到了输出吗?我得到了肯定的结果,再次检查..:还是我只是打字?@Waldema你做了3次替换吗?查看我在评论中发布的链接上的演示。哦,该死。是我打字。很抱歉是的,差不多好了。输出给了我@temp_replacex11x@temp_replacex
。所以仍然需要做一些事情。@Waldema。你确定你得到了输出吗?我得到了肯定的结果,再次检查..:还是我只是打字?@Waldema你做了3次替换吗?查看我在评论中发布的链接上的演示。哦,该死。是我打字。很抱歉如果我们想用xyz
替换abc
,用abc
替换xyz
,这会起作用吗?这会返回一个错误:TypeError:需要一个字符缓冲区object@Waldema-很抱歉耽搁了--我很难重现您的错误。最后,我意识到您必须使用Python2.x,因为只有这样才能产生错误。我编辑了我的帖子以支持2.x。如果能听到为什么我不能让它工作,我也会很酷。。仍在学习Python,但上面的代码返回了一个错误..:索科克!现在我明白了!是的,我正在使用Python2.7.5,这是受缓慢升级的大学世界的鼓励。。英雄联盟但不管怎样,向你们大家击掌帮助了我!=))如果我们想用xyz
替换abc
,用abc
替换xyz
,这会起作用吗?这会返回一个错误:TypeError:需要一个字符缓冲区object@Waldema-很抱歉耽搁了--我很难重现您的错误。最后,我意识到您必须使用Python2.x,因为只有这样才能产生错误。我编辑了我的帖子以支持2.x。如果能听到为什么我不能让它工作,我也会很酷。。仍在学习Python,但上面的代码返回了一个错误..:索科克!现在我明白了!是的,我正在使用Python2.7.5,这是受缓慢升级的大学世界的鼓励。。英雄联盟但不管怎样,向你们大家击掌帮助了我!=))