python - tutorial - एक अजगर सूची में सभी तत्वों के लिए एक तार्किक ऑपरेटर कैसे लागू करें
python tutorial (4)
इस तरह के ऑपरेशन के लिए मुहावरे को reduce
फ़ंक्शन (पाइथन 2.X में ग्लोबल, पाइथन 3.X में मॉड्यूल functools
में) का उपयोग करना है, जो कि एक उपयुक्त बाइनरी ऑपरेटर के साथ या तो operator
मॉड्यूल से लिया गया है या स्पष्ट रूप से कोडित है। आपके मामले में, यह operator.and_
reduce(operator.and_, [True, True, False])
मेरे पास अजगर में बुलियन की एक सूची है। मैं उन्हें (या या नहीं) और उन्हें परिणाम प्राप्त करना चाहता हूं। निम्नलिखित कोड काम करता है, लेकिन बहुत ही अजगर नहीं है।
def apply_and(alist):
if len(alist) > 1:
return alist[0] and apply_and(alist[1:])
else:
return alist[0]
कैसे इसे और अधिक पाइथोनिक की सराहना करने के बारे में कोई सुझाव।
एंडिंग और ओर्डिंग आसान है:
>>> some_list = [True] * 100
# OR
>>> any(some_list)
True
#AND
>>> all(some_list)
True
>>> some_list[0] = False
>>> any(some_list)
True
>>> all(some_list)
False
नोट करना भी काफी आसान है:
>>> [not x for x in some_list]
[True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
बेशक, आप उन परिणामों का उपयोग कैसे करेंगे, इसके लिए DeMorgan के प्रमेय के कुछ दिलचस्प अनुप्रयोगों की आवश्यकता हो सकती है।
तार्किक and
सभी तत्वों में a_list
:
all(a_list)
तार्किक or
a_list
में सभी तत्वों के a_list
:
any(a_list)
यदि आप रचनात्मक महसूस करते हैं, तो आप यह भी कर सकते हैं:
import operator
def my_all(a_list):
return reduce(operator.and_, a_list, True)
def my_any(a_list):
return reduce(operator.or_, a_list, False)
ध्यान रखें कि शॉर्ट सर्किट में उन का मूल्यांकन नहीं किया जाता है, जबकि अंतर्निहित इन्स ;-)
एक और मजेदार तरीका:
def my_all_v2(a_list):
return len(filter(None,a_list)) == len(a_list)
def my_any_v2(a_list):
return len(filter(None,a_list)) > 0
और अभी तक एक और:
def my_all_v3(a_list):
for i in a_list:
if not i:
return False
return True
def my_any_v3(a_list):
for i in a_list:
if i:
return True
return False
और हम सभी दिन पर जा सकते हैं, लेकिन हाँ, pythonic तरीका all
और any
उपयोग करना है :-)
वैसे, पायथन ने पुनरावृत्ति उन्मूलन नहीं किया है, इसलिए LISP कोड का अनुवाद करने की कोशिश न करें;
यहाँ एक और उपाय है:
def my_and(a_list):
return not (False in a_list)
def my_or(a_list):
return True in a_list
सभी तत्व सही होने पर वापस लौट आएंगे यदि सभी तत्व सत्य हैं, इसलिए किसी सूची में कोई गलत नहीं है। ओरिंग समान है, लेकिन यह सच लौटना चाहिए अगर कम से कम एक ट्रू वैल्यू एक सूची में मौजूद है।