मुझे निम्न कार्य की आवश्यकता है:
इनपुट : एlist
आउटपुट :
True
यदि इनपुट सूची के सभी तत्व मानक समानता ऑपरेटर का उपयोग करके एक दूसरे के बराबर मूल्यांकन करते हैं;False
अन्यथा।
प्रदर्शन : बेशक, मैं किसी भी अनावश्यक ओवरहेड को लाइक नहीं करना चाहता।
मुझे लगता है कि यह सबसे अच्छा होगा:
- सूची के माध्यम से पुनरावृति
- आसन्न तत्वों की तुलना करें
- और
AND
सभी परिणामस्वरूप बूलियन मान
लेकिन मुझे यकीन नहीं है कि ऐसा करने का सबसे पैथोनिक तरीका क्या है।
शॉर्ट-सर्किट सुविधा की कमी केवल एक लंबे इनपुट (~ 50 तत्वों) से अधिक होती है जिसमें असमान तत्व होते हैं। यदि यह अक्सर पर्याप्त होता है (सूची कितनी बार निर्भर हो सकती है), शॉर्ट-सर्किट की आवश्यकता होती है। सबसे अच्छा शॉर्ट-सर्किट एल्गोरिथ्म @ केनीटीएम लगता है checkEqual1
। हालांकि, यह इसके लिए एक महत्वपूर्ण लागत का भुगतान करता है:
- लगभग समान सूची में प्रदर्शन में 20x तक
- लघु सूचियों पर प्रदर्शन में 2.5x तक
यदि प्रारंभिक असमान तत्वों के साथ लंबे इनपुट नहीं होते हैं (या पर्याप्त रूप से शायद ही कभी होता है), शॉर्ट-सर्किट की आवश्यकता नहीं होती है। फिर, अब तक सबसे तेज़ @Ivo van der Wijk solution है।
functools.reduce(operator.eq, a)
है कि सुझाव नहीं दिया गया है।
a == b
या समान रूप में समानa is b
?