Удалить двойные элементы во вложенном списке - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть вложенный список Python:

[[[[['p'], ['q'], ['t'], ['u']], [['r'], ['s'], ['v'], ['w']]]], 
[[[['p'], ['q'], ['t'], ['w']], [['r'], ['s'], ['v'], ['u']]]], 
[[[['p'], ['q'], ['v'], ['u']], [['r'], ['s'], ['t'], ['w']]]], 
[[[['p'], ['q'], ['v'], ['w']], [['r'], ['s'], ['t'], ['u']]]], 
[[[['p'], ['s'], ['t'], ['u']], [['r'], ['q'], ['v'], ['w']]]], 
[[[['p'], ['s'], ['t'], ['w']], [['r'], ['q'], ['v'], ['u']]]], 
[[[['p'], ['s'], ['v'], ['u']], [['r'], ['q'], ['t'], ['w']]]], 
[[[['p'], ['s'], ['v'], ['w']], [['r'], ['q'], ['t'], ['u']]]], 
[[[['r'], ['q'], ['t'], ['u']], [['p'], ['s'], ['v'], ['w']]]], 
[[[['r'], ['q'], ['t'], ['w']], [['p'], ['s'], ['v'], ['u']]]], 
[[[['r'], ['q'], ['v'], ['u']], [['p'], ['s'], ['t'], ['w']]]], 
[[[['r'], ['q'], ['v'], ['w']], [['p'], ['s'], ['t'], ['u']]]], 
[[[['r'], ['s'], ['t'], ['u']], [['p'], ['q'], ['v'], ['w']]]], 
[[[['r'], ['s'], ['t'], ['w']], [['p'], ['q'], ['v'], ['u']]]], 
[[[['r'], ['s'], ['v'], ['u']], [['p'], ['q'], ['t'], ['w']]]], 
[[[['r'], ['s'], ['v'], ['w']], [['p'], ['q'], ['t'], ['u']]]]]

В этом списке каждый элемент удвоен.

Пример:

[[[['p'], ['q'], ['t'], ['u']], [['r'], ['s'], ['v'], ['w']]]]

- то же самоеas

[[[['r'], ['s'], ['v'], ['w']], [['p'], ['q'], ['t'], ['u']]]]

Как я могу удалить двойные элементы, используя понимание списка?Я пытался преобразовать список в набор, но это не работает.

Желаемый результат должен быть:

[[[[['p'], ['q'], ['t'], ['u']], [['r'], ['s'], ['v'], ['w']]]], 
[[[['p'], ['q'], ['t'], ['w']], [['r'], ['s'], ['v'], ['u']]]], 
[[[['p'], ['q'], ['v'], ['u']], [['r'], ['s'], ['t'], ['w']]]], 
[[[['p'], ['q'], ['v'], ['w']], [['r'], ['s'], ['t'], ['u']]]], 
[[[['p'], ['s'], ['t'], ['u']], [['r'], ['q'], ['v'], ['w']]]], 
[[[['p'], ['s'], ['t'], ['w']], [['r'], ['q'], ['v'], ['u']]]], 
[[[['p'], ['s'], ['v'], ['u']], [['r'], ['q'], ['t'], ['w']]]], 
[[[['p'], ['s'], ['v'], ['w']], [['r'], ['q'], ['t'], ['u']]]]]

Спасибо

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете создать словарь со сглаженными значениями в каждом подсписке:

d = [[[[['p'], ['q'], ['t'], ['u']], [['r'], ['s'], ['v'], ['w']]]], [[[['p'], ['q'], ['t'], ['w']], [['r'], ['s'], ['v'], ['u']]]], [[[['p'], ['q'], ['v'], ['u']], [['r'], ['s'], ['t'], ['w']]]], [[[['p'], ['q'], ['v'], ['w']], [['r'], ['s'], ['t'], ['u']]]], [[[['p'], ['s'], ['t'], ['u']], [['r'], ['q'], ['v'], ['w']]]], [[[['p'], ['s'], ['t'], ['w']], [['r'], ['q'], ['v'], ['u']]]], [[[['p'], ['s'], ['v'], ['u']], [['r'], ['q'], ['t'], ['w']]]], [[[['p'], ['s'], ['v'], ['w']], [['r'], ['q'], ['t'], ['u']]]], [[[['r'], ['q'], ['t'], ['u']], [['p'], ['s'], ['v'], ['w']]]], [[[['r'], ['q'], ['t'], ['w']], [['p'], ['s'], ['v'], ['u']]]], [[[['r'], ['q'], ['v'], ['u']], [['p'], ['s'], ['t'], ['w']]]], [[[['r'], ['q'], ['v'], ['w']], [['p'], ['s'], ['t'], ['u']]]], [[[['r'], ['s'], ['t'], ['u']], [['p'], ['q'], ['v'], ['w']]]], [[[['r'], ['s'], ['t'], ['w']], [['p'], ['q'], ['v'], ['u']]]], [[[['r'], ['s'], ['v'], ['u']], [['p'], ['q'], ['t'], ['w']]]], [[[['r'], ['s'], ['v'], ['w']], [['p'], ['q'], ['t'], ['u']]]]]
def flatten(_d):
   return [[c for [c] in _d[0][0]], [c for [c] in _d[0][1]]]

def match(a, b):
  return all(c == d for c, d in zip(sorted(a), sorted(b)))

_d = {i:flatten(a) for i, a in enumerate(d)}
result = [a for i, a in enumerate(d) if not any(match(_d[i], _d[c]) for c in range(i))]

Вывод:

[[[[['p'], ['q'], ['t'], ['u']], [['r'], ['s'], ['v'], ['w']]]], 
 [[[['p'], ['q'], ['t'], ['w']], [['r'], ['s'], ['v'], ['u']]]], 
 [[[['p'], ['q'], ['v'], ['u']], [['r'], ['s'], ['t'], ['w']]]], 
 [[[['p'], ['q'], ['v'], ['w']], [['r'], ['s'], ['t'], ['u']]]], 
 [[[['p'], ['s'], ['t'], ['u']], [['r'], ['q'], ['v'], ['w']]]], 
 [[[['p'], ['s'], ['t'], ['w']], [['r'], ['q'], ['v'], ['u']]]], 
 [[[['p'], ['s'], ['v'], ['u']], [['r'], ['q'], ['t'], ['w']]]], 
 [[[['p'], ['s'], ['v'], ['w']], [['r'], ['q'], ['t'], ['u']]]]]
...