Почему строковый метод .replace() в python не проводит нужное количество замен?
Посчитаем количество пробелов в промежутках между строками в вашем примере:>>> a = '0 1  2   3    4     5      6       7        8         9'
>>> import re
>>> [len(x) for x in re.split('\d',a)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
вы меняете каждые 3 пробела на 1c=a.replace('   ', ' ', 2000)
>>> [len(x) for x in re.split('\d',c)]
[0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 0]
Соответственно там где количество пробелов менее 3 - их оставляем
Там где более или равно - каждые три пробела меняем на один + остаток не делящийся на 3
К примеру для 8 пробелов:>>> (lambda x: x//3 + x%3)(8)
4
Для 9:>>> (lambda x: x//3 + x%3)(9)
3
Параметр 2000 указывает лишь на то, что в каждом случае провести не более 2000 замен. Поскольку у вас количество пробелов в примере заведомо меньшее - этот параметр не оказывает никакого влияния. Если было бы больше - то было бы произведено количество замен, не большее 2000.
Наглядно изменение третьего параметра:>>> [len(x) for x in re.split('\d',a.replace('   ', ' ', 0))]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> [len(x) for x in re.split('\d',a.replace('   ', ' ', 1))]
[0, 1, 2, 1, 4, 5, 6, 7, 8, 9, 0]
>>> [len(x) for x in re.split('\d',a.replace('   ', ' ', 2))]
[0, 1, 2, 1, 2, 5, 6, 7, 8, 9, 0]
>>> [len(x) for x in re.split('\d',a.replace('   ', ' ', 3))]
[0, 1, 2, 1, 2, 3, 6, 7, 8, 9, 0]
>>> [len(x) for x in re.split('\d',a.replace('   ', ' ', 4))]
[0, 1, 2, 1, 2, 3, 4, 7, 8, 9, 0]
>>> [len(x) for x in re.split('\d',a.replace('   ', ' ', 5))]
[0, 1, 2, 1, 2, 3, 2, 7, 8, 9, 0]
...
Оно сделало то, что попросили ее сделать, делайте несколько проходов.