#python-3.x #list #duplicates
#python-3.x #Список #дубликаты
Вопрос:
Привет всем, у меня есть список списков значений, таких как :
list_of_values=[['A','B'],['A','B','C'],['D','E'],['A','C'],['I','J','K','L','M'],['J','M']]
и я хотел бы сохранить в этом списке только те списки, в которых у меня наибольшее количество значений.
Например , в sublist1
: ['A','B']
A и B также присутствуют в sublist2
['A','B','C']
, поэтому я удаляю sublist1
. То же самое для sublist4
. также sublist6
удаляется, потому что J и M присутствовали в a дольше sublist5
.
в конце я должен получить:
list_of_no_redundant_values=[['A','B','C'],['D','E'],['I','J','K','L','M']]
другой пример =
list_of_values=[['A','B'],['A','B','C'],['B','E'],['A','C'],['I','J','K','L','M'],['J','M']]
ожидаемый результат :
[['A','B','C'],['B','E'],['I','J','K','L','M']]
У кого-нибудь есть идея?
Комментарии:
1. Какого результата вы бы ожидали , если бы у вас были входные
[['A', 'B', 'D'], ['A', 'C', 'D', 'E'], ['B', 'F']]
данные ? Есть ли гарантия, что элементы меньших списков не будут разделены между множеством разных больших списков?2. Ожидаемым здесь было бы сохранить весь список, поскольку все
['A', 'B', 'D']
не все присутствуют в['A', 'C', 'D', 'E']
, то же самое для'B', 'F']
Ответ №1:
mylist=[['A','B'],['A','C'],['A','B','C'],['D','E'],['I','J','K','L','M'],['J','M']]
def remove_subsets(lists):
outlists = lists[:]
for s1 in lists:
for s2 in lists:
if set(s1).issubset(set(s2)) and (s1 is not s2):
outlists.remove(s1)
break
return outlists
print(remove_subsets(mylist))
Это должно привести к [['A', 'B', 'C'], ['D', 'E'], ['I', 'J', 'K', 'L', 'M']]
Комментарии:
1. @Grendel, в этом коде была небольшая ошибка. Я обновил его исправлением. Пожалуйста, проверьте это.
2. Нормально ли, что я получаю: ValueError: list.remove(x): x отсутствует в списке для других данных?
3. @Grendel
break
Отсутствовал. Цикл продолжает проверку, и если снова было совпадение, то вы столкнетесь с упомянутой вами проблемой. Я обновил ответ, чтобы исправить то же самое.