在python中将'aa'翻译为'a',将'ab'翻译为'b'

时间:2012-08-28 03:38:29

标签: python translate

我认为它过夜,但找不到快速的方法来做到这一点

首先来到的地方是replace()

for x,y in {'aa':'a','ab':'b'}.items():
    s = s.replace(x,y)

但这不适用于这种情况:'aabcc'

正确的是'abcc' 但输出将是'bcc'

我可以写一些类似的代码(我已经用C#,php,actionscript等各种语言编写了这些代码。)

   output = []
   def foo1(x):
      if(x!='a'):
          output.append(x)
      else:
          functionPointer = readafterA
   def readafterA(x):
      if(x=='a'):
          output.append('a')
      elif(x=='b'):
          output.append('b')
      else:
          output.append('a'+x)
      functionPointer = foo1
   functionPointer = normalExecute
   for singlechar in s:
      functionPointer(singlechar)
   print(''.join(output))

我不想再写这些代码了,becuz:

1,当字典变大时,这些代码会搞砸。

第二,我认为必须有一些更优雅的方法来完成Python中的这项工作

编辑我已在第一段修正了它,但这不是重点。

2 个答案:

答案 0 :(得分:5)

你不能使用词典。按照要替换它们的顺序指定元组。

>>> s = 'aabcc'
>>> for x,y in (('ab','b'), ('aa','a')):
...     s = s.replace(x,y)
... 
>>> s
'abcc'

您也可以使用正则表达式

>>> s = 'aabcc'
>>> import re
>>> re.sub("a([ab])","\\1", s)
'abcc'

答案 1 :(得分:0)

这里发生的事情是:

>>> "aabcc".replace("aa","a")
"abcc"

并在下一次迭代中:

>>> "abcc".replace("ab","b")
"bcc"

所以,你需要改变逻辑。

我有一个建议:

"aa"替换为"^aa^",将"ab"替换为"^b^" 然后删除所有不需要的"^"

现在

>>> "aabcc".replace("aa","^a^")
"^a^bcc"

在下一次迭代中:

>>> "^a^bcc".replace("ab","b")
"^a^bcc"
>>> "^a^bcc".replace("^","")
"abcc"

很酷呃?