2016-01-31 62 views
0

我尝试根据字典d = {'A':'C', 'C':'B'}替换mystr = 'AC'中的字符。不过,我不会一次全部替换。我将逐个替换Key中的字符(每次替换后我会进行一些计算)。更重要的是,我不能替换已经替换的字符。python替换字符而不替换已替换的字符

例如:在第一步骤中,我与'C'替换'A',然后我'CC'。我使用'CC'做了一些计算,然后进入下一步。在下一步中,我将用'B'替换'C'。尽管我在'CC'中获得了两个'C',但第一个'C'已被替换。因此,我只更换一个,然后我得到'CB'

+0

我正在写它。稍后我会发布它。 – neouyghur

+0

你知道'dict'键顺序是任意的,对吗? –

+0

嗯,我不知道。你的意思是'''用于键入d.key():print key'''在每次运行时打印不同的设置? – neouyghur

回答

1

我的做法是保留一个flag列表来检测一个字符是否已经被更改。由于字符串是不可变的,我已经将它列为一个列表来缓解我的任务。

我认为这将有助于你:

mystr = 'AC' 
mylist = list(mystr) 
flag = len(mystr) * [False] 

d = {'A':'C', 'C':'B'} 
for key in d.keys(): 
    for ind, char in enumerate(mylist): 
     if flag[ind] == False and key == char: 
      mylist[ind] = d[key] 
      flag[ind] = True 
    #do some calculation 

mystr = "".join(mylist) 

print mystr 
+0

如果替换顺序很重要,则必须使用'collections.OrderedDict([('A','C'),('C','B')])'而不是常规的'dictionary'。 –

+0

因为你只是循环它,所以元组列表的工作也是如此。 (['A','C'),('C','B')]:' –

0

也许ü需要使用保存结果列表?或者你可以在更换后计算。并使用max position in replace

l = list() 
mystr = "AC" 
dictionary = {'A':'C', 'C':'B'} 

for char in mystr: 
    if char in dictionary.keys(): 
     new_word = mystr.replace(char, dictionary[char], 1) 
     l.append(new_word)