2012-05-28 37 views
5

thể trùng lặp:
Python: removing duplicates from a list of listsPython loại bỏ các bản sao của danh sách với các yếu tố unhashable trong một dòng

Giả sử tôi có danh sách

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

Nếu tất cả các yếu tố trong một là hashable (như trong trường hợp đó), điều này sẽ thực hiện công việc:

list(set(a)) 

Nhưng nếu

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

?

+1

Bạn có thể chuyển thành bộ dữ liệu trước khi thêm vào bộ này. – MattH

+1

có thể trùng lặp của [Python: xóa các bản sao khỏi danh sách các danh sách] (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-while-preserve-order http://stackoverflow.com/questions/479897/how-do-you-remove -duplicates-from-a-list-in-python – jamylak

+0

Chỉ cần nhận ra đây là một bản sao của nhiều câu hỏi khác, nó phải được đóng lại. – jamylak

Trả lời

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

bộ này hiểu việc cho Danh mục Lists để sản xuất một bộ dữ liệu:

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

Sau đó sử dụng để biến nó thành một danh sách liệt kê một lần nữa không có bản sao:

>>> [list(x) for x in {(tuple(e)) for e in a}] 
[[1, 2], [1, 3]] 
Các vấn đề liên quan