Nano Hash - криптовалюты, майнинг, программирование

Как удалить дубликаты из вложенных списков

У меня есть списки в виде list<list<list>> списков, из которых я хочу удалить повторяющийся список.

list_1 = [
           [
             [1,2],[2,3]
           ],
           [
             [3,4],[5,6]
           ],
           [
             [3,4], [5,6]
           ]

         ]

Итак, ожидаемый результат должен быть

output = [
           [
             [1,2],[2,3]
           ],
           [
             [3,4],[5,6]
           ]
         ]

Есть ли ярлык для этого вместо сравнения каждого списка друг с другом. Мы не можем сделать set (list_1), тогда что проще всего удалить дубликаты?

P.S: Это трехуровневая вложенность, поэтому ответ, помеченный как повторяющийся вопрос, не работает.

26.03.2019

  • @istol2myhead Работает только для 2-х уровневой вложенности, у меня 3-х уровневой вложенности. 26.03.2019

Ответы:


1

Вы можете попробовать это

k = [
           [
             [1,2],[2,3]
           ],
           [
             [3,4],[5,6]
           ],
           [
             [3,4], [5,6]
           ]

         ]

import itertools
k.sort()
list(k for k,_ in itertools.groupby(k))
[[[1, 2], [2, 3]], [[3, 4], [5, 6]]]

Для получения подробной информации вы можете найти здесь https://stackoverflow.com/a/2213973/4320263

26.03.2019

2

Один из способов, которым я добился этого, - сгладить список до более низкого уровня, а затем сделать его ленивым и в то же время сохранить порядок, повторяя список списков и добавляя к набору "seen":

lst = [ [[1,2],[2,3]], [[3,4],[5,6]], [[3,4], [5,6]] ]

from toolz import unique

flat_list = [item for sublist in lst for item in sublist]
res = map(list, unique(map(tuple, flat_list)))
print(list(res))

ВЫВОД:

[[1, 2], [2, 3], [3, 4], [5, 6]]

ИЗМЕНИТЬ:

И если вы хотите, чтобы вложенные списки вернулись, объедините каждые 2 элемента в пару:

print([res[i:i+2] for i in range(0, len(res), 2)])

ВЫВОД:

[[[1, 2], [2, 3], [3, 4]], [[5, 6]]]
26.03.2019
Новые материалы

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

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..