2012-05-28 3 views
5

Можно создать дубликат:
Python: removing duplicates from a list of listsPython устранения дубликатов списка с unhashable элементов в одной строке

Say я имею список

a=[1,2,1,2,1,3] 

Если все элементы а являются hashable (как в этом случае), это сделало бы работу:

list(set(a)) 

Но что, если

a=[[1,2],[1,2],[1,3]] 

?

+1

Они могут превращаться в кортежи перед добавлением в набор. – MattH

+1

Возможный дубликат [Python: удаление дубликатов из списка списков] (http://stackoverflow.com/questions/2213923/python-removing-duplicates-from-a-list-of-lists) http: // stackoverflow. com/questions/480214/how-do-you-remove-duplicates-from-a-list-in-python-save-order-order http://stackoverflow.com/questions/479897/how-do-you-remove -duplicates-from-a-list-in-python – jamylak

+0

Только что понял, что это дубликат многих других вопросов, он должен быть закрыт. – jamylak

ответ

10
>>> from itertools import groupby 
>>> a = [[1,2],[1,2],[1,3]] 
>>> [k for k,v in groupby(sorted(a))] 
[[1, 2], [1, 3]] 
0

Этот набор постижение работает в Список списков, чтобы произвести набор кортежей:

>>> {(tuple(e)) for e in a} 
set([(1, 2), (1, 3)]) 

затем использовать это, чтобы превратить его в список списков снова не дубликатами:

>>> [list(x) for x in {(tuple(e)) for e in a}] 
[[1, 2], [1, 3]] 
Смежные вопросы