Я подозреваю, что может быть другой способ более непосредственного подхода к вашей истинной проблеме, но попробуйте это:
код
import collections as ct
def replace(s, subs):
"""Return a tuple of substitutes and a related dict."""
dd = ct.defaultdict(list)
replaced = []
for i, word in enumerate(s.split()):
if word in set(subs):
pos = "<{}>".format(i)
replaced.append(pos)
dd[word].append(pos)
else:
replaced.append(word)
return " ".join(replaced), dict(dd)
Демо +
x = "hayde hayde bim bam bimbam hayde hayde bim bam hayde hayde bim bbm ba bi bim"
replace(x, ["bim", "bam"])
выход
('hayde hayde <2> <3> bimbam hayde hayde <7> <8> hayde hayde <11> bbm ba bi <15>',
{'bim': ['<2>', '<7>', '<11>', '<15>'], 'bam': ['<3>', '<8>']})
Вы прокомментировали:
Мне нужно знать, где я почистил струны.
Почему бы не перечислить разделенную строку с числами, которые отражают фактические проиндексированные позиции? Числовые заменители в этом примере, таким образом, представляют позиции индекса строки разделения. Вы можете легко поменять их местами с помощью увеличивающегося счетчика.
+ Примечание: тестовый вход немного отличается от OP ("bimbam").