2016-01-31 3 views
0

Я пытаюсь заменить символы в mystr = 'AC' согласно dict d = {'A':'C', 'C':'B'}. Однако, Я не буду заменять все сразу. Я буду заменять символы в порядке ключа один за другим (я делаю некоторые вычисления после каждой замены). Что еще более важно, Я не могу заменить символы, которые уже заменены.python заменить символ без замены уже замененных символов

Например: на первом этапе, я заменяю 'A' с 'C', то я получил 'CC'. Я использую 'CC' выполнить некоторые вычисления, а затем перейдите к следующему шагу. На следующем этапе я заменю 'C' на 'B'. Хотя я получил два 'C' s в 'CC', но первый 'C' уже заменен. Поэтому я заменяю только один, затем я получил 'CB'

+0

Я пишу его сейчас. Позже я отправлю его. – neouyghur

+0

Вы знаете, что порядок 'dict' является произвольным, не так ли? –

+0

Хмм, я не знаю. Вы имеете в виду '' 'для ключа в d.key(): print key' '' print different set при каждом запуске? – 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')])' вместо обычного словаря. –

+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) 
Смежные вопросы