как удалить повторяющиеся значения в списке списка? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть такой список:

 list_values=[("10",1),("10",2),("16",2),("16",1),("15",1)]

Я хочу получить результат как:

 Result=[("10",1),("16",2),("15",1)]

Может кто-нибудь мне помочь?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Очень похоже на Как вы удаляете дубликаты из списка при сохранении порядка? , но просто «переносите» второй элемент, не включая его в хэш / сравнение / что угодно.

Два способа сделать это:

Либо использовать маркер, установленный для записи вхождений первых значений:

list_values=[("10",1),("10",2),("16",2),("16",1),("15",1)]

seen = set()

seen_add = seen.add

result = []
for k,v in list_values:
    if k not in seen:
        seen_add(k)
        result.append([k,v])

print(result)

выходы (сохраняет порядок):

[['10', 1], ['16', 2], ['15', 1]]

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

result = list(dict(reversed(list_values)).items())

print(result)

выход (не сохранит порядок):

[('15', 1), ('10', 1), ('16', 2)]

Использование collections.OrderedDict и обратноеdouble позволяет также сохранить порядок

import collections

result = list(reversed(list(collections.OrderedDict(reversed(list_values)).items())))

приводит к:

[('10', 1), ('16', 2), ('15', 1)]

То есть, если не используется Python 3.6+, где словари сохраняют порядок вставки.Из python 3.5 вы можете удалить некоторые принудительные преобразования списка, чтобы они работали:

list(reversed(collections.OrderedDict(reversed(list_values)).items()))
0 голосов
/ 21 февраля 2019

очень плохо, что ОП не пытается или не показывает нам какое-то решение, но здесь простое:

list_values = [("10",1),("10",2),("16",2),("16",1),("15",1)]
Result = list(dict(reversed(list_values)).items())
print(Result)

даст вам:

[('15', 1), ('16', 2), ('10', 1)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...