как я могу заменить n-ые вхождения в списке строк без использования встроенной функции

Я немного новый в python, и у меня есть проблема, чтобы написать скрипт, который принимает четыре элемента (ex str, Replacefrom, replaceto и n), чтобы найти символы и заменить n-ое вхождение.

Пример:

>>> replaeceit("Mississippi", "s", "l", 2) 'Mislissippi' >>> replaeceit("Mississippi", "s", "l", 0) 'Mississippi' 

n равно 2, поэтому код меняет второй s на l .. и когда n = 0, то он не делает ничего

честно говоря, я не знаю, как реализовать n для уравнения, это мой код до сих пор без n

 def replaceit(str,replacefrom,replaceto): new="" for letter in str: if letter== replacefrom: new=new+replaceto else: new=new+letter return new 

Хорошо, возможно, теперь я понял, что вы ищете:

 def replaceit(st, remove, put, pos): outs = "" count = 0 for letter in st: if letter == remove: count += 1 if count == pos: outs += put else: outs += letter else: outs += letter return outs 

Вывод:

 In [84]: replaceit("Mississipi", "s", "l", 2) Out[84]: 'Mislissipi' 

Конечно, вы можете проверить, что аргументы no2 и no3 являются строками с len () из 1.

Это вторая попытка понять ваш вопрос:

 def replaceit(s, replacefrom, replaceto, n): new_s, count = '', 0 for letter in s: if letter == replacefrom: count += 1 if count == n: new_s += replaceto continue new_s += letter return new_s 

Это соответствует вашим примерам:

 >>> replaceit("Mississippi", "s", "l", 2) 'Mislissippi' >>> replaceit("Mississippi", "s", "l", 0) 'Mississippi' 

Если это не то, что вы хотите, объясните лучше.

Вы также можете добиться одинаковых результатов с помощью регулярных выражений:

 def replaceit(s, replacefrom, replaceto, n): import re if n <= 0: return s return re.sub('(.*?%s)%s' % (('%s.*?' % replacefrom) * (n-1), replacefrom), r'\1%s' % replaceto, s) 

Каждый всегда любит выражение генератора.

 from itertools import count def replaceit(str, replacefrom, replaceto, n): c = count(1) return ''.join(replacefrom if l == replaceto and c.next() == n else l for l in str)