[Python] الحصول على الفتحات فريدة من مجموعة الثعبان


Answers

بدلا قبيحة، حل مباشر. يمكنك تنفيذ المساواة لعلاج (2, 3) و (3, 2) ككائنات متساوية، يمكنك تنفيذ __hash__ لعدم السماح أعضاء متساويين في مجموعة. يمكنك الوصول إلى الأعضاء كما في التأكيدات أدناه.

أنا غير راض عن كيفية وظيفة هاشينغ يبدو، ولكن على أي حال - انها مجرد دليل على المفهوم. نأمل أن تجد حل أكثر أناقة لحساب ذلك دون الاصطدامات.

class WhateverItIs(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def __eq__(self, other):
        return ((self.a == other.a and self.b == other.b) or
        (self.a == other.b and self.b == other.a))
    def __hash__(self):
        return hash(tuple(sorted((self.a, self.b))))

o1 = WhateverItIs(2, 3)
o2 = WhateverItIs(3, 2)
o3 = WhateverItIs(4, 3)

assert {o1, o2, o3} in [{o1, o3}, {o2, o3}]
assert o1 == o2
assert o1.a == 2
assert o1.b == 3
assert o2.a == 3
assert o2.b == 2
assert o3.a == 4
assert o3.b == 3
Question

لدي حاليا مجموعة مثل ما يلي:

{(a,b), (b,a), (c,b), (b,c)}

ما أود أن يكون هو:

{(a,b), (c,b)}

كما قد تلاحظ تمت إزالة القيم المكررة تماما بحيث اثنين من التوائم أبدا نفس العناصر داخل بغض النظر عن النظام.

كيف يمكنني أن أقول مجموعة لتجاهل ترتيب العناصر في توبل ومجرد التحقق من القيم بين الحكايات؟