Дубликат записи в списке python

#python #list #duplicates

Вопрос:

У меня есть список, содержащий дубликаты, некоторые из них точно такие же, в то время как другие имеют только префикс в начале. Например, следующие записи относятся к одной и той же записи: «user01», «aa-user01», «xyz-user01»

Мне удалось удалить записи, которые точно такие же, но не с префиксом:

 list = ['user01','user01', 'aa-user01','user02','user02', 'user03', 'xyz-user02']
list2 = []

for i in range(0, len(list)):
    if list[i] not in list2:
        list2.append(list[i])

print(list2)
 

Я понимаю это:

 ['user01', 'aa-user01', 'user02', 'user03', 'xyz-user02']
 

Результат, который я хочу:

 ['user01', 'user02', 'user03']
 

Комментарии:

1. @Elikill58 Это имеет мало общего с вопросом здесь.

2. Что, если бы у вас было bcd-user04 , но не user04 было в вашем списке? вы бы хотели сохранить префикс в этом случае?

3. Также может быть полезно использовать набор для удаления дубликатов вместо цикла for.

4. @Elikill58 к сожалению, это не дает ответа на вопрос.

5. @Altareos я хочу удалить все префиксы и оставить только user04.

Ответ №1:

Самое простое исправление рассматривало бы токен только после "-" :

 for x in list:
    user = x.rsplit("-", 1)[-1]
    if user not in list2:
        list2.append(user)
 

Примечание: вы не должны скрывать встроенные имена, такие как list . Кроме того, проверки содержимого обходятся дорого для списков, поэтому, если у вас много данных, вам следует рассмотреть возможность использования set или dict .

 s = set(x.rsplit("-", 1)[-1] for x in lst)
 

Документы:

Ответ №2:

 for i in range(0, len(list)):

    if list[i][list[i].find("user"):] not in list2:
        list2.append(list[i])
 

Ответ №3:

 list1 = ['user01','user01', 'aa-user01','user02','user02', 'user03', 'xyz-user02']
list2 = []

for i in range(0, len(list1)):
    if list1[i] not in list2:
        list2.append(list1[i])

list2 = list(dict.fromkeys(list2))
print(list2)
 

печать(список 2)

Комментарии:

1. Повторяющиеся записи не удаляются: [‘user01’, ‘aa-user01’, ‘user02’, ‘user03’, ‘xyz-user02’]

Ответ №4:

Одним из способов сделать это было бы сначала удалить префикс, используя понимание списка;

Удалить префикс

 list = ['user01','user01', 'aa-user01','user02','user02', 'user03', 'xyz-user02']
list = [i.split('-', 1)[-1] for i in l]
list2 = []

for i in range(0, len(list)):
    if list[i] not in list2:
        list2.append(list[i])

print(list2)
 

Комментарии:

1. Tnxs, это работает, я просто изменяю вторую строку : list = [i.разделить(‘-‘, 1)[-1] для меня в списке]

Ответ №5:

Вы можете перейти к пониманию короткого списка, включая:

  • lower() -> Игнорировать ввод регистра (удалить, если это не нужно)
  • split() -> Удаляет префикс
  • set() -> Удаляет дубликаты

Ваш результат будет set([x.lower().split('-', 1)[-1] for x in test_list]) , пока test_list это ваш список.

Ответ №6:

 my_list = ['user01','user01', 'aa-user01','user02','user02', 'user03', 'xyz-user02']


new_list = [j.split('-')[1] if len(j.split('-'))==2 else j for j in my_list]
    ['user01', 'user01', 'user01', 'user02', 'user02', 'user03', 'user02']#value of new_list
    set(new_list)#output unique values
    {'user01', 'user02', 'user03'}