2012-02-20 25 views

Trả lời

4

Nếu tất cả những gì bạn quan tâm là thứ tự của các mục trong danh sách ngoài cùng (đó là tất cả ngoại trừ từ "sâu" gợi ý cho tôi — nó một mình mang lại nghi ngờ trong tâm trí của tôi như những gì bạn có ý nghĩa), và bạn biết rằng sẽ không có bản sao, bạn có thể sử dụng một số set.

>>> larry = [(1,'a'), (2, 'b')] 
>>> moe = [(2, 'b'), (1, 'a')] 
>>> set(larry) == set(moe) 
True 

Nếu trường hợp là đơn giản như hai-tuples, bạn cũng có thể sử dụng một dict, đó sẽ là {1: 'a', 2: 'b'}. Điều này có thể hoặc có thể không phải là một cấu trúc thuận tiện hơn cho bạn. So sánh của dict(larry) == dict(moe) sẽ làm những gì bạn muốn, anyway.

Nếu bạn quan tâm đến bản sao, nó sẽ mất nhiều công việc hơn một chút, lấy bản sao của danh sách và kéo từng mục một cho đến khi nó không thành công hoặc một ô trống.

+0

Sẽ không có bất kỳ khả năng trùng lặp nào. – canadadry

+0

Vì vậy, sau đó tôi nghĩ rằng đây là những gì bạn muốn? –

6

Nếu tôi hiểu bạn, bộ dữ liệu của bạn đại diện cho bộ và danh sách của bạn đại diện cho bộ. Điều hiển nhiên phải làm là để chuyển đổi chúng sang bộ:

def setterific(l): 
    return frozenset(frozenset(p) for p in l) 

setterific(larry) == setterific(moe) 

này sử dụng frozensets, bởi vì người ta không thể có bộ bộ trong python (vì bộ là có thể thay đổi); xem How can I create a Set of Sets in Python?.

Nếu bạn chỉ có một cấp nhóm, hãy truy cập frozenset(larry) == frozenset(moe).

+0

Các bộ dữ liệu không đại diện cho các bộ. Chúng được đặt hàng tiêu đề SMTP. – canadadry

+0

@BonAmi: Câu hỏi của bạn là mơ hồ, đó là lý do tại sao các câu trả lời khác đã giải quyết cùng một kịch bản mà tôi có. – Marcin

Các vấn đề liên quan