У меня была очень похожая потребность, когда результат был бы:
['sheep', 'sheep1', 'tiger', 'sheep2', 'hippo', 'tiger1']
Я подошел к нему немного по-другому, ища решение O (n), и расширил класс словаря.
class IncDict(dict):
def __missing__(self,key):
return -1
def __getitem__(self,key):
val = dict.__getitem__(self,key)
val+=1
dict.__setitem__(self,key,val)
if val==0:
return key
else:
return key+str(val)
l = ['sheep', 'sheep', 'tiger', 'sheep', 'hippo', 'tiger']
uniquify = IncDict()
[uniquify[x] for x in l]
Вывод:
['sheep', 'sheep1', 'tiger', 'sheep2', 'hippo', 'tiger1']