ऐसा करने का सबसे अच्छा तरीका सूचियों को क्रमबद्ध करना और उनकी तुलना करना है। (उपयोग Counter
करने योग्य नहीं है कि वस्तुओं के साथ काम नहीं करेगा।) यह पूर्णांकों के लिए सीधा है:
sorted(a) == sorted(b)
यह मनमाना वस्तुओं के साथ थोड़ा पेचीदा हो जाता है। आप, वस्तु पहचान, यानी के बारे में परवाह है कि क्या अगर एक ही वस्तुओं दोनों सूचियों में हैं, तो आप उपयोग कर सकते हैं id()
प्रकार कुंजी के रूप में कार्य करते हैं।
sorted(a, key=id) == sorted(b, key==id)
(पायथन 2.x में आपको वास्तव में key=
पैरामीटर की आवश्यकता नहीं है , क्योंकि आप किसी भी वस्तु की किसी भी वस्तु से तुलना कर सकते हैं। ऑर्डर मनमाना है, लेकिन स्थिर है, इसलिए यह इस उद्देश्य के लिए ठीक काम करता है; इससे कोई फर्क नहीं पड़ता कि वस्तुएं क्या ऑर्डर करती हैं। में, केवल यह कि दोनों सूचियों के लिए ऑर्डरिंग समान है। पायथन 3 में, हालांकि, विभिन्न प्रकारों की वस्तुओं की तुलना करना कई परिस्थितियों में अस्वीकृत है - उदाहरण के लिए, आप तार की तुलना पूर्णांक से नहीं कर सकते - इसलिए यदि आपके पास ऑब्जेक्ट होंगे विभिन्न प्रकार के, स्पष्ट रूप से ऑब्जेक्ट की आईडी का उपयोग करने के लिए सबसे अच्छा।)
यदि आप सूची में वस्तुओं की तुलना मूल्य से करना चाहते हैं , तो दूसरी ओर, आपको पहले यह परिभाषित करने की आवश्यकता है कि वस्तुओं के लिए "मूल्य" का क्या अर्थ है। फिर आपको एक कुंजी के रूप में (और पायथन 3 के लिए, एक सुसंगत प्रकार के रूप में) प्रदान करने के लिए कुछ तरीके की आवश्यकता होगी। एक संभावित तरीका जो बहुत सारी मनमानी वस्तुओं के लिए काम करेगा, उनके द्वारा सॉर्ट करना है repr()
। बेशक, यह repr()
बड़ी सूची और इतने पर अतिरिक्त समय और मेमोरी बिल्डिंग स्ट्रिंग्स को बर्बाद कर सकता है ।
sorted(a, key=repr) == sorted(b, key==repr)
यदि ऑब्जेक्ट्स आपके सभी प्रकार के हैं, तो आप __lt__()
उन्हें परिभाषित कर सकते हैं ताकि ऑब्जेक्ट जानता हो कि दूसरों से खुद की तुलना कैसे करें। तब आप बस उन्हें क्रमबद्ध कर सकते हैं और key=
पैरामीटर की चिंता नहीं कर सकते । बेशक आप परिभाषित __hash__()
और उपयोग भी कर सकते हैं Counter
, जो तेज होगा।