Как проверить, существует ли последовательность символов в списке?
У меня есть строка с некоторыми символами, которые имеют повторяющиеся последовательности. Я знаю, что строки неизменяемы, поэтому я превращаю строку в список. Однако я не уверен, как перебрать список, найти вхождение и изменить первую букву вхождения.
message: DDMCAXQVEKGYBNDDMZUH
Occurence is: DDM
list: ['D', 'D', 'M', 'C', 'A', 'X', 'Q', 'V', 'E', 'K', 'G', 'Y', 'B', 'N', 'D', 'D', 'M', 'Z', 'U', 'H']
В настоящее время я просто превращаю сообщение в список. Я пробовал разные способы, которые были безуспешными, поэтому я не опубликовал это. На самом деле не прошу вас написать код, но хотя бы объясните, как этого добиться.






Гораздо проще проверить, существует ли строка в другой строке, поскольку вы можете просто использовать оператор in:
if 'DDM' in message:
# do something
Но поскольку ваша цель — изменить первую букву вхождения, вы можете использовать метод str.index, чтобы получить индекс вхождения, а затем собрать новую строку с кусочками текущей строки и новой буквы:
try:
i = message.index('DDM')
message = message[:i] + new_letter + message[i + 1:]
except ValueError:
raise RuntimeError("Sequence 'DDM' not found in message.")
Вы можете использовать re.sub():
import re
s = 'DDMCAXQVEKGYBNDDMZUH'
re.sub(r'DDM', '$DM', s)
# $DMCAXQVEKGYBN$DMZUH
Простое решение с циклом for:
msg = 'DDMCAXQVEKGYBNDDMZUH'
occ = 'DDM'
for i in range(len(msg)):
if msg[i:i+len(occ)] == occ:
msg = msg[:i] + 'x' + msg[i+1:]
в результате xDMCAXQVEKGYBNxDMZUH
Это также работает с перекрывающимися подстроками. Например:
msg = 'AAABAA'
occ = 'AA'
даст xxABxA
Самый простой способ - использовать строковую функцию заменять().
string.replace(s, old, new[, maxreplace])
Return a copy of string s with all occurrences of substring old replaced by new. If the optional argument maxreplace is given, the first maxreplace occurrences are replaced.
message = "DDMCAXQVEKGYBNDDMZUH"
print message.replace("DDM", "ABC", 1)
Функция замены заменит первое вхождение DDM в строке сообщения.
вывод: ABCCAXQVEKGYBNDDMZUH
Если я внимательно прочитал ваш вопрос, вы хотите найти первое вхождение DDM в своем сообщении и заменить его первый символ. В этом случае используйте ниже:
message = "DDMCAXQVEKGYBNDDMZUH"
print message.replace("DDM", "ADM", 1)
вывод: ADMCAXQVEKGYBNDDMZUH