2015-01-27 2 views
-1

У меня есть вложенный список, какНеобходим порядок сохранения вложенного списка удаления дубликатов

L = [[0,1,2,5,6],[1,2,9,4],[3,8,5,5,5]] 

И я хочу, чтобы удалить все дубликаты, как это:

L2 = [[0,1,2,5,6],[9,4],[3,8]] 

Все функции я нашел, плоский список или не удаляет дубликат в дочернем списке.

У вас есть идея?

ответ

3

Вы можете сделать это с помощью набора и списка-понимания:

>>> seen = set() 
>>> seen_add = seen.add 
>>> [[x for x in lst if x not in seen and not seen_add(x)] for lst in L] 
[[0, 1, 2, 5, 6], [9, 4], [3, 8]] 

Приведенный выше код также можно записать в виде:

>>> seen = set() 
>>> out = [] 
>>> for lst in L: 
    temp = [] 
    for x in lst: 
     if x not in seen: 
      temp.append(x) 
      seen.add(x) 
    out.append(temp) 
...  
>>> out 
[[0, 1, 2, 5, 6], [9, 4], [3, 8]] 
+0

Что цель '' 'seen_add = seen.add '' 'в примере понимания списка? – wnnmaw

+0

@wnnmaw Микро-оптимизация для предотвращения ненужного атрибута. –

+0

seen_add = seen.add - это необходимо? Почему бы не увидеть .add (x)? – helloV

Смежные вопросы