Mam ciąg znaków, w którym znak ("@") musi być zastąpiony przez znaki z listy jednego lub więcej znaków "w kolejności" i "okresowo". Tak na przykład mamJaki jest najlepszy sposób "okresowego" zastępowania znaków w łańcuchu w Pythonie?
'[email protected]@@[email protected]@[email protected]@@[email protected]@[email protected]'
i chcą
'ab1cde23fghi1jk2lmno312p3qrs1tuvwxy2z'
dla replace_chars = ['1', '2', '3']
Problemem jest to, że w tym przykładzie jest więcej @ w ciągu niż mam zamienniki.
To moja próba:
result = ''
replace_chars = ['1', '2', '3']
string = '[email protected]@@[email protected]@[email protected]@@[email protected]@[email protected]'
i = 0
for char in string:
if char == '@':
result += replace_chars[i]
i += 1
else:
result += char
print(result)
ale działa to tylko oczywiście jeśli istnieje nie więcej niż trzy @ w oryginalnym ciąg a poza tym mam IndexError.
Edytuj: Dziękujemy za odpowiedzi!
użyj 'replace_chars [i% replace_chars.length]'. wtedy robisz tylko "modulo" długości w indeksie. na przykład z trzema znakami: '1% 3 -> 1',' 2% 3 -> 2', '3% 3 -> 0',' 4% 3 -> 1', itd ... –
Dodaj 'i % = 3 "poniżej' i + = 1' –