Не только это, но 00
не является «нулевым» в любом воображении - это строка из 2 символов. Похоже, вы молча предполагаете, что ваша строка состоит из подстрок, каждая из которых состоит из двух шестнадцатеричных цифр, и любая выполняемая вами строковая операция не будет иметь представления об этом вашем небольшом частном соглашении - если вам удастся «заменить случайную 00» на нее вполне может быть одна, состоящая из второй цифры, скажем, «F0», за которой следует первая цифра, скажем, «03»: не то, что вы, вероятно, имеете в виду!
Логически более чистый подход заключается в том, чтобы сначала разбить вашу строку на 2-значные части, что сделает ваше невысказанное предположение ясным и явным:
>>> string = "4100360036000000570046004200410061006200730020003600"
>>> pieces = [string[i:i+2] for i in range(0, len(string), 2)]
>>> pieces
['41', '00', '36', '00', '36', '00', '00', '00', '57', '00', '46', '00', '42', '00', '41', '00', '61', '00', '62', '00', '73', '00', '20', '00', '36', '00']
>>>
Да, это можно сделать намного более кратким, но я стремлюсь к ясности и концептуальной четкости здесь! -).
Теперь найдите все цифры «00»:
>>> where0s = [i for i in range(len(pieces)) if pieces[i] == '00']
>>> where0s
[1, 3, 5, 6, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25]
(опять же, легко сделать компакт, но это самый ясный способ; -).
Теперь получите случайный выбор из where0s и либо удалите его, либо замените его, например, 'BA', затем присоединитесь к строке:
>>> import random
>>> pickone = random.choice(where0s)
>>> pickone
25
>>> # if replacing:
...
>>> pieces[pickone] = 'BA'
>>> ''.join(pieces)
'41003600360000005700460042004100610062007300200036BA'
>>> # if removing:
...
>>> del pieces[pickone]
>>> ''.join(pieces)
'41003600360000005700460042004100610062007300200036'
>>>
Если это действительно именно та операция, которую вы хотите выполнить, но вам нужна большая краткость и скорость, а не полная ясность, мы, конечно, можем продолжать развивать идею!