1

一晩かけて考えましたが、手っ取り早い方法が見つかりませんでした

最初に配置されたのは 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))

私はもうこれらのコードを書きたくありません。

第一に、辞書が大きくなると、これらのコードは台無しになります。

2番目に、Pythonでこの仕事をするためのもっとエレガントな方法がいくつかあるはずだと私は信じています

編集:最初の段落で修正しましたが、それはポイントではありませんでした。

4

2 に答える 2

5

dictを使用することはできません。置換したい順序でタプルを指定します。

>>> 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'
于 2012-08-28T03:54:46.527 に答える
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"

かっこいいね?

于 2012-08-28T04:09:25.153 に答える