#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
списке или inType2
список?4. Дубликат будет удален, если он относится к типу 1.
Ответ №1:
Две возможности:
-
Преобразуйте каждый подсписок в кортеж и вставьте в набор. Сделайте то же самое для compare candidate и сравните наборы, чтобы определить равенство.
-
Установите метод сортировки для подсписков, затем отсортируйте каждый список подсписков. Это позволит упростить сравнение.
Оба этих подхода в основном решают вашу проблему упорядочения подсписок; есть много других способов.
Ответ №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)