क्या कुछ ए, बी ऐसे हैं जो अधिकतम (ए, बी)! = अधिकतम (बी, ए) हैं? [बन्द है]


11

अजगर 3.x में, वहाँ कुछ कर रहे हैं a, bकि इस तरह के max(a, b) != max(b, a)?

aऔर bएक अंतर्निहित अजगर प्रकार का होना चाहिए और इसमें कोई रूपांतरण नहीं होना चाहिए।

के प्रकार aऔर bहो सकते हैं: संख्या, फ्लोट, बूल, सूची, ट्यूपल ...

उदाहरण:

a = 1 # Correct
a = [1, 2] # Correct
a = float('nan') # Wrong

1
आपका प्रश्न स्पष्ट नहीं है
— सेरालोक

मुझे नहीं लगता कि कोई भी है ... maxएक अंतर्निहित फ़ंक्शन है जो इनपुट के रूप में एक चलने योग्य वस्तु लेता है । इसलिए, a,bसमान है , b,aइसलिए max(a,b)समान होना चाहिएmax(b,a)
— अनवर

1
यह एक अच्छा प्रश्न है लेकिन आपको इसे संपादित करना चाहिए और इसे और अधिक समझाना चाहिए
— El.Hum

2
आपका एडिट केवल सबसे अधिक वोट वाले उत्तर के नीचे आपकी टिप्पणी के संदर्भ में समझ में आता है। वहाँ और यहाँ, आप बहस करने में विफल रहते हैं कि float('nan')कोई अंतर्निहित प्रकार नहीं है। मुझे लगता है कि "बिल्ट-इन टाइप" का मतलब होगा कि आप एक नया बनाने के बिना कुछ भी बना सकते हैं class।
— टेपेइमम

2
यदि आप बाहर करना चाहते हैं float('nan'), तो क्यों? स्पष्ट होने के लिए, आपको एक प्रश्न पूछने की अनुमति है जिसमें आप कुछ float('nan')करना चाहते हैं जैसे कि आप चाहते हैं; यह समस्या नहीं है। समस्या सिर्फ इतनी है कि किसी को यकीन नहीं है कि आप क्या पूछना चाहते हैं।
— नेट

जवाबों:


17

यह सभी मानदंडों को पूरा करता है:

>>> max(1.0, float("nan"))
1.0

>>> max(float("nan"), 1.0)
nan

इसका कारण यह है कि किसी भी अन्य के साथ तुलना !=या हमेशा झूठे के isसाथ float("nan")वापसी।

अधिक आम तौर पर, हमारे पास max(a, b) != max(b, a)तब हो सकता है जब प्रकार (एस) a, bकुल ऑर्डर प्रदान नहीं करते हैं। जैसा कि डैनियल मेसेजो बताते हैं, सेट के पास भी यह संपत्ति है। सेट के लिए <अर्थ है 'सख्त सबसेट' है, लेकिन साथ {1, 2}और {3, 4}न अन्य, इसलिए की एक सख्त सबसेट है:

>>> max({1, 2}, {3, 4})
{1, 2}

>>> max({3, 4}, {1, 2})
{3, 4}

यह एक तकनीकी रूप से नहीं है max(a, b) != max(b, a)क्योंकि 1 == True, लेकिन अभी भी एक नमूदार अंतर है:

>>> max(True, 1)
True

>>> max(1, True)
1

1
वाह ... वो क्यों ??
— अनवर

7
@ stackFF4 अगर float("nan")अंतर्निहित नहीं है, तो यह क्या है? यह निश्चित रूप से अंतर्निहित है।
— संन्यास

9
@ stackFF4: float('nan')एक फ्लोट है। यह floatवहीं कहता है , इसलिए मुझे यकीन नहीं है कि आपको इसके अलावा क्या होने की उम्मीद है। आप चाहें तो इसे चेक कर सकते typeहैं।
— user2357112

1
@Anwarvic: दिलचस्प बात यह है कि यह एक अजगर की बात नहीं है, यह वास्तव में है कि कैसे हार्डवेयर में तैरता है। NaN लगभग हर प्रोग्रामिंग भाषा में हर चीज के साथ गलत तुलना करता है।
— मूकिंग डक

2
@ नट: लेकिन कोई भी ज्यादातर समय अपवाद नहीं चाहता है। यह maxव्यवहार इसे C से अलग परिभाषित करने की एक कला है fmax(जो NaN प्रसार की गारंटी देता है), इसके बजाय ऐसा कुछ है, a<b ? b : aजिसकी aतुलना हमेशा तब होती है जब तुलना झूठी होती है। NaN "unordered" wrt है। कोई भी अन्य संख्या, a < NaNहमेशा झूठी होती है, और ऐसा ही हैNaN < b
— पीटर कॉर्ड्स

5

प्रलेखन के अनुसार , maxसेट पर उपयोग करने से अपरिभाषित परिणाम उत्पन्न होते हैं:

तदनुसार, सेट उन कार्यों के लिए उपयुक्त तर्क नहीं हैं जो कुल ऑर्डरिंग पर निर्भर करते हैं (उदाहरण के लिए, न्यूनतम (), अधिकतम) (और सॉर्ट किए गए) इनपुट के रूप में सेट की एक सूची दी गई अपरिभाषित परिणामों का उत्पादन करते हैं।

यहाँ एक उदाहरण है,

a = {1, 2}
b = {2, 3}
print(max(b, a) != max(a, b))

उत्पादन

True

यहाँ यह ध्यान देने योग्य हो सकता है कि "अपरिभाषित परिणाम" शायद पायथन में कुछ अन्य भाषाओं की तुलना में बहुत कम हैं। कोई भी नस्लीय राक्षसों की संभावना नहीं है, और यह शायद एक अपवाद भी नहीं उठाएगा। यह सिर्फ एक ज्यादातर मनमाना मूल्य (के लिए minऔर max) या ऑर्डर करने (के लिए sorted) देता है।
— 5
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.