[英]translate 'aa' to 'a' and 'ab' to 'b' in python
我想了一晚上,但找不到快速的方法
首先来到的地方是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))
我不想再写那些代码了,因为:
首先,当字典变大时,这些代码会弄乱。
第二,我相信在Python中必须有一些更优雅的方法来完成这项工作
编辑:我已经在第一段中修复了它,但这不是重点。
您不能使用字典。 按要替换它们的顺序指定元组。
>>> 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'
这里发生的是:
>>> "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"
酷吧?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.