2012-02-20 19 views
6

मैं tuples की दो सूचियां तुलना करना चाहते हैं:मैं tuples की दो सूचियों की गहरी समानता तुलना कैसे करूं?

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

ऐसी है कि सूची में आइटम्स का क्रम अलग हो सकता है। क्या पुस्तकालय कार्य ऐसा करने के लिए हैं?

>> deep_equals(larry, moe) 
True 

उत्तर

4

यदि आप सभी की देखभाल करते हैं तो बाहरी सूची में वस्तुओं का क्रम है (जो कि "गहरी" शब्द को छोड़कर सभी को बताता है — यह अकेले मेरे दिमाग में संदेह लाता है कि आप क्या मतलब रखते हैं), और आप पता है कि कोई डुप्लीकेट नहीं होने जा रहे हैं, आप set का उपयोग कर सकते हैं।

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

मामले इन दो-tuples के रूप में सरल है, तो आप भी एक dict, जो {1: 'a', 2: 'b'} होगा इस्तेमाल कर सकते हैं। यह आपके लिए एक सुविधाजनक संरचना हो सकती है या नहीं भी हो सकती है। dict(larry) == dict(moe) की तुलना वही करेगी जो आप चाहते हैं।

यदि आप डुप्लिकेट की परवाह करते हैं, तो यह सूचियों की प्रतियां लेते हुए और आइटम को एक-एक करके खींचने तक विफल रहता है या कोई खाली नहीं होता है।

+0

डुप्लिकेट की कोई संभावना नहीं होगी। – canadadry

+0

तो मुझे लगता है कि यह वही है जो आप चाहते हैं? –

6

यदि मैं आपको समझता हूं, तो आपके टुपल्स सेट का प्रतिनिधित्व करते हैं, और आपकी सूचियां सेट का प्रतिनिधित्व करती हैं। ऐसा करने के लिए स्पष्ट बात उन्हें सेट करने के लिए कन्वर्ट करने के लिए है:

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

setterific(larry) == setterific(moe) 

यह frozensets का उपयोग करता है, क्योंकि एक अजगर में सेट का सेट नहीं रख सकते हैं (क्योंकि सेट परिवर्तनशील हैं); How can I create a Set of Sets in Python? देखें।

यदि आपके पास केवल एक स्तर का सेट है, तो frozenset(larry) == frozenset(moe) के साथ जाएं।

+0

टुपल्स सेट का प्रतिनिधित्व नहीं करते हैं। उन्हें एसएमटीपी हेडर का आदेश दिया जाता है। – canadadry

+0

@ बोनामी: आपका प्रश्न संदिग्ध है, यही कारण है कि अन्य उत्तरों ने मेरे समान परिदृश्य को संबोधित किया है। – Marcin

संबंधित मुद्दे