Самый быстрый способ удалить дубликаты в списке списков в Python?

#python #python-3.x #duplicates

#python #python-3.x #дубликаты

Вопрос:

У меня есть список списков в Python3, где данные выглядят следующим образом:

 ['Type1', ['123', '22'], ['456', '80']]
['Type2', ['456', '80'], ['123', '22']]
  

Список довольно большой, но приведенный выше пример дублирующихся данных, которые мне нужно удалить. Ниже приведен пример данных, которые НЕ дублируются и их не нужно удалять:

 ['Type1', ['789', '45'], ['456', '80']]
['Type2', ['456', '80'], ['123', '22']]
  

Я уже удалил все абсолютно идентичные дубликаты. Какой самый быстрый способ выполнить это удаление «обратного дублирования» в Python3?

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

1. Я понимаю, что вы хотите удалить дубликаты, но не могли бы вы, пожалуйста, показать нам желаемый результат?

2. Итак, похоже, вы определяете «дубликат» как «имеющий точно такие же подсписки, но в любом порядке», да? Итак, ваш первый пример является дубликатом, потому что обе строки типа имеют [123,22] и [456,80] , но в разном порядке. Второй вариант не является дублирующим, потому что, хотя они оба имеют [456,80] , другие подсписки отличаются. Это то, к чему вы клоните? Имеет ли значение порядок внутри вложенных списков (могут [1,2] и [2,1] считаться идентичными вложенными списками)?

3. Дублирование между какими данными вы ищете? И если найдено повторяющееся значение, что дальше? Вы хотите удалить подсписок? Или заменить повторяющееся число на ноль? Вы хотите оставить дубликаты такими, какие найдены? Вы хотите оставить оригинал включенным в Type1 списке или in Type2 список?

4. Дубликат будет удален, если он относится к типу 1.

Ответ №1:

Две возможности:

  1. Преобразуйте каждый подсписок в кортеж и вставьте в набор. Сделайте то же самое для compare candidate и сравните наборы, чтобы определить равенство.

  2. Установите метод сортировки для подсписков, затем отсортируйте каждый список подсписков. Это позволит упростить сравнение.

Оба этих подхода в основном решают вашу проблему упорядочения подсписок; есть много других способов.

Ответ №2:

 data = [['Type1', ['123', '22'], ['456', '80']],
    ['Type2', ['456', '80'], ['123', '22']]]
myList = []
for i in data:
    myTuple = (i[1], i[2])
    myList.append(myTuple)

print(myList)
for x in myList:
    for y in myList:
        if x==y:
            myList.remove(x)
            break

print(myList)