Вы можете заменить что-то там, получив индекс вместе с элементом.
>>> foo = ['a', 'b', 'c', 'A', 'B', 'C']
>>> for index, item in enumerate(foo):
... print(index, item)
...
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'A')
(4, 'B')
(5, 'C')
>>> for index, item in enumerate(foo):
... if item in ('a', 'A'):
... foo[index] = 'replaced!'
...
>>> foo
['replaced!', 'b', 'c', 'replaced!', 'B', 'C']
Обратите внимание, что если вы хотите удалить что-то из списка, вам придется перебирать копию списка, иначе вы получите ошибки, так как вы пытаетесь изменить размер чего-то, над чем вы перебираете. Это можно сделать довольно легко с помощью ломтиков.
Неправильно:
>>> foo = ['a', 'b', 'c', 1, 2, 3]
>>> for item in foo:
... if isinstance(item, int):
... foo.remove(item)
...
>>> foo
['a', 'b', 'c', 2]
2 все еще там, потому что мы изменили размер списка, пока мы повторяли его. Правильный путь будет:
>>> foo = ['a', 'b', 'c', 1, 2, 3]
>>> for item in foo[:]:
... if isinstance(item, int):
... foo.remove(item)
...
>>> foo
['a', 'b', 'c']