Python: как найти дубликаты в списке и обновить эти повторяющиеся элементы, переименовав их с добавлением прогрессивного письма

У меня есть список таких элементов:

['T1','T2','T2','T2','T2','T3','T3' ]

Мне нужно убедиться, что дубликаты переименованы с прогрессивным письмом, добавленным следующим образом:

['T1','T2A','T2B','T2C','T2D','T3A','T3B']

но только при наличии более одного вхождения одного и того же элемента.

Кроме того, можно ли это сделать без создания нового списка?

Есть идеи?

3 Solutions collect form web for “Python: как найти дубликаты в списке и обновить эти повторяющиеся элементы, переименовав их с добавлением прогрессивного письма”

 from collections import Counter from string import ascii_uppercase as letters def gen(L): c = Counter(L) for elt, count in c.items(): if count == 1: yield elt else: for letter in letters[:count]: yield elt + letter 

Теперь:

 >>> L = ['T1','T2','T2','T2','T2','T3','T3'] >>> list(gen(L)) ['T2A', 'T2B', 'T2C', 'T2D', 'T3A', 'T3B', 'T1'] 

Учитывая, что список отсортирован, это изменит список на месте. Если список не отсортирован, вы можете отсортировать его сначала, используя lis.sort() :

 >>> from string import ascii_uppercase >>> from itertools import groupby >>> from collections import Counter >>> lis = ['T1', 'T2', 'T2', 'T2', 'T2', 'T3', 'T3'] >>> c = Counter(lis) >>> for k, v in groupby(enumerate(lis), key = lambda x:x[1]): l = list(v) if c[k] > 1: for x, y in zip(l, ascii_uppercase): lis[x[0]] = x[1] + y ... >>> lis ['T1', 'T2A', 'T2B', 'T2C', 'T2D', 'T3A', 'T3B'] 
 def fix(L): d = {} for i in xrange(len(L)): d[L[i]] = d.get(L[i],0)+1 if d[L[i]] > 1: if d[L[i]] == 2: L[L.index(L[i])] += 'A' L[i] += chr(64+d[L[i]]) 
  • Два отдельных списков python, действующих как один
  • групповые индексы списка в списке списков
  • Python: Как удалить пустые списки из списка?
  • создание словарей для отображения порядка ранжирования
  • Изменение списка во время итерации по нему - почему бы и нет?
  • Python: определение списка определенного типа объекта
  • Найдите позицию 1, в которой два списка одинаковы
  • Как закрепить два списка списков в Python?
  • Дублирующий элемент в списке python
  • Разделите два списка в python
  • Как проверить, существует ли n-й элемент в списке Python?
  • Python - лучший язык программирования в мире.