У меня есть несколько длинных списков списков связанных объектов, которые я хотел бы группировать, чтобы уменьшить избыточность. Псевдокод:Свернуть список списков, чтобы устранить избыточность
>>>list_of_lists = [[1,2,3],[3,4],[5,6,7],[1,8,9,10]...]
>>>remove_redundancy(list_of_lists)
[[1,2,3,4,8,9,10],[5,6,7]...]
Таким образом, списки, содержащие одни и те же элементы, будут сворачиваться в отдельные списки. Свертывание их легко, как только я найду списки для объединения, я могу сделать списки в наборах и принять их союз, но я не уверен, как сравнивать списки. Нужно ли делать серию циклов for
?
Моя первая мысль состояла в том, что я должен прокручивать и проверять, находится ли каждый элемент в подсписке в любом из других списков, если да, объединить списки и затем начать все сначала, но это кажется ужасно неэффективным. Я сделал поиск и нашел это: Python - dividing a list-of-lists to groups, но мои данные не структурированы. Кроме того, мои фактические данные представляют собой ряд строк и, следовательно, не сортируются в каком-либо значимом смысле.
Я могу написать некоторый gnarly цикл, чтобы сделать эту работу, но мне было интересно, есть ли какие-либо встроенные функции, которые упростили бы это сравнение. Может быть, что-то в list comprehensions?
Просто, чтобы быть ясным: если в каких-либо двух списках содержатся какие-либо совпадающие элементы, вы хотите объединить их элементы? У вас есть повторяющиеся элементы, например. '[1, 2, 2, 3]' и ['1, 5]'? Как правило, вы должны смотреть на использование кортежей и наборов, а не списки списков для такого типа вещей. – YXD
У меня также есть тот же вопрос с YXD - какой избыточности вы пытаетесь удалить? – user1941126
@YXD - К вашему первому вопросу, да. Если в моем примере также был список '[1, 5]', то все элементы должны быть в одном списке. В конце концов, я в основном хочу серию наборов (без дубликатов в любом месте), но мои исходные данные могут иметь дубликаты в списке. Возможно, мне следует объяснить, как мои данные действительно выглядят/откуда они пришли ... опубликует редактирование за секунду. – kevbonham