2012-06-29 28 views
5

Bạn biết đấy, để biến danh sách:Python - Cách nhanh để xóa các bản sao trong danh sách này?

a = ["hello", "hello", "hi", "hi", "hey"] 

vào danh sách:

b = ["hello", "hi", "hey"] 

Bạn chỉ cần làm điều đó như thế này:

b = list(set(a)) 

Vừa nhanh vừa pythonic.

Nhưng nếu tôi cần phải chuyển danh sách này:

a = [["hello", "hi"], ["hello", "hi"], ["how", "what"], ["hello", "hi"], 
    ["how", "what"]] 

tới:

b = [["hello", "hi"], ["how", "what"]] 

cách pythonic để làm điều đó là gì?

Trả lời

14
>>> a = [["hello", "hi"], ["hello", "hi"], ["how", "what"], ["hello", "hi"], ["how", "what"]] 
>>> set(map(tuple, a)) 
set([('how', 'what'), ('hello', 'hi')]) 
+1

Cảm ơn rất nhiều, bạn đời! – Shane

+0

@Shane Không có vấn đề gì: D – jamylak

1

Chỉ cần một cách tiếp cận đó là không tốt (mặc dù nó hoạt động cho các đối tượng unhashable miễn là họ đang orderable)

>>> from itertools import groupby 
>>> a = [["hello", "hi"], ["hello", "hi"], ["how", "what"], ["hello", "hi"], ["how", "what"]] 
>>> [k for k, g in groupby(sorted(a))] 
[['hello', 'hi'], ['how', 'what']] 
+0

+1 là người duy nhất không chuyển đổi danh sách thành bộ dữ liệu. Ví dụ của ông có danh sách các danh sách không phải danh sách các bộ dữ liệu –

0

Nếu thứ tự ban đầu cần phải được bảo tồn và bạn có Python 2.7 +

>>> from collections import OrderedDict 
>>> a = [["hello", "hi"], ["hello", "hi"], ["how", "what"], ["hello", "hi"], ["how", "what"]] 
>>> list(OrderedDict.fromkeys(map(tuple, a))) 
[('hello', 'hi'), ('how', 'what')] 
Các vấn đề liên quan