2016-01-31 2 views
0

Я знаю, как удалить дубликаты из списка с помощью set() или двух списков, но как мне сохранить тот же список и добавить число в конце для дубликатов? Я мог бы сделать это, используя, если, но это не пифонический. Спасибо, парни!!Как создать уникальный список из списка с дубликатами

nome_a = ['Anthony','Rudolph', 'Chuck', 'Chuck', 'Chuck', 'Rudolph', 'Bob'] 
nomes = [] 

for item in nome_a: 
    if item in nomes: 

     if (str(item) + ' 5') in nomes: 
      novoitem = str(item) + ' 6' 
      nomes.append(novoitem) 

     if (str(item) + ' 4') in nomes: 
      novoitem = str(item) + ' 5' 
      nomes.append(novoitem) 

     if (str(item) + ' 3') in nomes: 
      novoitem = str(item) + ' 4' 
      nomes.append(novoitem) 

     if (str(item) + ' 2') in nomes: 
      novoitem = str(item) + ' 3' 
      nomes.append(novoitem) 

     else: 
      novoitem = str(item) + ' 2' 
      nomes.append(novoitem) 

    if item not in nomes: 
     nomes.append(item) 

print(nomes) 

Редактировать (1): Извините. Я отредактировал для уточнения.

+0

Я попытался запустить код и не получил никакого вывода. Должен ли список поддерживать заказ? – user1462442

+0

Нет, это не так. Я отредактировал его для уточнения. – nicmano

ответ

0

Вы можете использовать следующее:

names = ['Anthony','Rudolph', 'Chuck', 'Chuck', 'Chuck', 'Rudolph', 'Bob'] 

answer = [] 
name_dict = {} 

for name in names: 
    if name_dict.get(name): 
     name_dict[name] += 1 
     answer.append('{}_{}'.format(name, name_dict[name])) 
    else: 
     name_dict[name] = 1 
     answer.append(name) 

print(answer) 

Выход

['Anthony', 'Rudolph', 'Chuck', 'Chuck_2', 'Chuck_3', 'Rudolph_2', 'Bob'] 
+0

Спасибо! Мне никогда не приходило в голову использовать словарь для решения проблемы! Работы приветствуют! – nicmano

+0

Отлично - обратите внимание, что вам может потребоваться немного изменить код, чтобы принять во внимание имена верхнего и нижнего регистров – gtlambert

+0

ok! Большое спасибо! – nicmano

Смежные вопросы