【问题标题】:translate 'aa' to 'a' and 'ab' to 'b' in python在python中将'aa'翻译成'a'和'ab'翻译成'b'
【发布时间】:2012-08-22 13:24:02
【问题描述】:

我想了一晚上,但找不到快速的方法

首先出现的是replace()

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

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

正确的是'abcc' 但输出将是“密件抄送”

我可以编写一些类似的代码(我已经用各种语言编写了这些代码,如 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))

我不想再写那些代码了,因为:

第一,当字典变大时,那些代码会搞砸。

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

编辑:我已经在第一段中修复了它,但这不是重点。

【问题讨论】:

  • 我看不出你在做什么。鉴于您的输入和输出列表,您似乎只想删除第一个字符。
  • 你想要像this这样的东西。
  • 您使用replace 的示例需要s = s.replace(...) 才能执行任何操作。
  • alex,你的解决方案很有效,太棒了!我会给你最好的答案,请多解释一下代码。对python和正则表达式不太熟悉

标签: python translate


【解决方案1】:

这里发生的事情是:

>>> "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"

很酷吧?

【讨论】:

  • 这不是一个常见的解决方案,如果输入中有 ^ 怎么办?
  • 使用您希望在您的文档中永远不会出现的其他字符串。例如“\replacement”而不是“^”
【解决方案2】:

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

>>> 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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2020-03-12
    • 1970-01-01
    相关资源
    最近更新 更多