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 в dict
  • Проверьте, является ли переменная списком или кортежем
  • Форматировать строку со всеми элементами списка
  •  
    Interesting Posts for Van-Lav

    Сокращение числа карт не удалось с помощью pymongo, но успех в оболочке mongo

    аргумент parsing в python

    Получите данные json через url и используйте в python (simplejson)

    Моя игра-головоломка на Python

    Как узнать, существует ли дата между двумя другими датами в Python?

    Импортирование theano: AttributeError: объект 'module' не имеет атрибута 'find_graphviz'

    взятие n * n матрицы ввода пользователем в python

    Почему (1 в == Истина) оценивается в False?

    Использование Python / PySerial и процессора

    Как выбрать столбцы DataFrame на основе частичного совпадения?

    почему успешный тайм-аут задачи в планировщике web2py?

    Итерации через слова файла в Python

    многопроцессорная работа не работает (oserror: Недопустимый аргумент)

    Наследование, когда __new __ () не возвращает экземпляр класса

    Есть ли способ использовать читаемость (алгоритм извлечения текста) и собственный алгоритм в python для извлечения ссылок из текста?

    Python - лучший язык программирования в мире.