2014-11-16 3 views
1

Я искал ответ на мой вопрос, и обнаружил, что многие сказали попробовать set(my_list), но в моем случае (у меня есть списки в списке) питон выдает ошибку:В python, как проверить, имеет ли список списков дубликаты?

Traceback (most recent call last): 
    File "E:/Users/Rene/PycharmProjects/vaip/Main.py", line 17, in <module> 
    set(punktid) 
TypeError: unhashable type: 'list' 

Так что мой вопрос, как может Я найти и удалить дубликаты в списке, как это:

my_list = [[0, 3], [3, 4], [5, 6], [9, 2], [0, 3]] 
+0

Этот вопрос может помочь понять всю хеширования вещь : [Хеширование вопроса] (http://stackoverflow.com/questions/2671376) –

ответ

3

преобразовательного все подсписки наборы позволяет создавать set (все элементы становятся hashable):

>>> {tuple(x) for x in my_list} 
{(5, 6), (9, 2), (0, 3), (3, 4)} 

В этом случае мы используем скобки для обозначения set comprehension, хотя также можно использовать обычный set constructor:

>>> set(tuple(x) for x in my_list) 
{(5, 6), (9, 2), (0, 3), (3, 4)} 

Если конечный результат должен быть список списков (порядок не может быть сохранена):

>>> [list(y) for y in {tuple(x) for x in my_list}] 
[[5, 6], [9, 2], [0, 3], [3, 4]] 
+0

Может быть стоит отметить, что '{...}' создает экземпляр внутри внутри набора. –

0

Вы можете использовать,

>>> l 
[[0, 3], [3, 4], [5, 6], [9, 2], [0, 3]] 
>>> def remove_duplicate(l): 
    tup = [tuple(x) for x in l] 
    set_tup = set(tup) 
    return [list(x) for x in list(set_tup) ] 

>>> print remove_duplicate(l) 
[[5, 6], [9, 2], [0, 3], [3, 4]]