#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'}