2016-04-03 3 views
0

Хорошо, я действительно новичок в Python и понятия не имею, как это сделать:Перестановка пары символов в строке

мне нужно взять строку, скажем, «ABAB__AB», преобразовать его в список, а затем взять ведущий индекс пары, которую я хочу переместить, и поменять эту пару с __. Я думаю, что результат должен выглядеть примерно так:

move_chars('ABAB__AB', 0) '__ABABAB'

и другой пример:

move_chars('__ABABAB', 3) 'BAA__BAB'

Честно говоря понятия не имею, как это сделать.

+0

Есть ли у вас предварительные попытки с нежелательными результатами? – TigerhawkT3

+0

У меня было несколько попыток. Но я действительно не знаю, с чего начать. Я пробовал: def move_chars (state, pos): s = список (состояние) Действительно я просто не знаю, что я делаю. –

ответ

0

Строки Python неизменяемы, поэтому вы не можете изменить строку. Вместо этого вы создаете новую строку.

Если вы хотите иметь возможность изменять отдельные символы в строке, вы можете преобразовать ее в список символов, работать над ней, а затем объединить список обратно в строку.

chars = list(str) 
# work on the list of characters 
# for example swap first two 
chars[0], chars[1] = chars[1], chars[0] 
return ''.join(chars) 
+0

Итак, используйте команды, например .pop() и .append(), чтобы перемещать символы вправо? Но как мне заставить пары передвигаться? например, взять символы в позиции 0 и 1, а затем поменять их на те, что указаны в словах 3 и 4? –

+0

@TownofRavens Возможно, вы захотите пересмотреть свою структуру данных. Если вы собираетесь перемещать пары букв, особенно несколько раз, то, возможно, вам следует просто придерживаться списка. –

+0

@TownofRavens Если все, что вы хотите сделать, это несколько свопов, вы должны использовать индексы, 'chars [0], chars [3] = chars [3], chars [0]; символы [1], символы [4] = символы [4], символы [1] '. – szym

0

Я думаю, что это должно пойти в комментариях, но я не могу комментировать из-за отсутствия репутации, так что ...

Вы, вероятно, хотите придерживаться индекса списка свопинга, а чем с использованием .pop() и .append(). .pop()может удалить элементы из произвольного индекса, но только один раз, и .append() может только добавить в конец списка. Таким образом, они довольно ограничены, и это осложнит ваш код, чтобы использовать их в таких проблемах.

Итак, хорошо, лучше придерживаться с заменой индекса.

0

Трюк состоит в том, чтобы использовать список фрагментов для перемещения частей строки.

def move_chars(s, index): 
    to_index = s.find('__')    # index of destination underscores 
    chars = list(s)      # make mutable list 
    to_move = chars[index:index+2]   # grab chars to move 
    chars[index:index+2] = '__'   # replace with underscores 
    chars[to_index:to_index+2] = to_move # replace underscores with chars 
    return ''.join(chars)     # stitch it all back together 

print(move_chars('ABAB__AB', 0)) 
print(move_chars('__ABABAB', 3)) 
+0

Большое вам спасибо! Я понимаю это сейчас. –

Смежные вопросы