Почему метод lower() меняет сразу две одинаковых соседних символа?

Подскажите, пожалуйста, почему в таком варианте поочередной замены каждой последующей буквы на заглавную происходит одновременная замена буквы "L"? Решение я нашел, а объяснение найти не смог

b = ['hello']
for i in b:
    m = []
    for j in i:
        m.append(i.replace(j.lower(), j.upper()))
print(m)
['Hello', 'hEllo', 'heLLo', 'heLLo', 'hellO']

Ответы (2 шт):

Автор решения: Vladimir Chistov

Потому что функция replace заменяет все вхождения первого аргумента в строке на второй.

Работающий код:

b = ['hello']

for i in b:
    m = []
    for index, j in enumerate(i):
        m.append(i[:index] + j.upper() + i[index + 1:])

print(m)

Результат:

['Hello', 'hEllo', 'heLlo', 'helLo', 'hellO']
→ Ссылка
Автор решения: vadim vaduxa

у replace есть третий аргумент - сколько раз меняем

a = 'qasAAn'
b = a.replace('A', '-', 1)
print(b)  # 'qas-An'
→ Ссылка