किलों के लिए अधिकतम और न्यूनतम मूल्य


744

मैं अजगर में पूर्णांकों के लिए न्यूनतम और अधिकतम मूल्यों की तलाश कर रहा हूं। उदाहरण के लिए, जावा में, हमारे पास Integer.MIN_VALUEऔर है Integer.MAX_VALUE। क्या अजगर में ऐसा कुछ है?


14
ध्यान दें कि पायथन 3 में intमूल रूप से longपाइथन 2 के प्रकार के समान है , इसलिए अधिकतम या न्यूनतम का विचार intपूरी तरह से गायब हो जाता है। यह मूल रूप से अजगर 2 पर भी अप्रासंगिक है।
एजीएफ

8
@agf: यह विभिन्न तरीकों से प्रासंगिक हो सकता है। उदाहरण के लिए किसी भी एल्गोरिथ्म में जिसे न्यूनतम मान को सहेजना आवश्यक है (जैसे एक छंटाई एल्गोरिथ्म)। मिन वैल्यू को sys.maxint पर इनिशियलाइज़ किया जा सकता है, इसलिए यह गारंटी देता है कि जो भी पहला वैल्यू मिला है वह मिन के रूप में लिया गया है
बेसिल पेरेनॉड

@ इसके अलावा, आपके पास एक सूची हो सकती है जहां सभी मान अधिक हैं sys.maxintक्योंकि यह केवल intपायथन 2 के प्रकार के लिए अधिकतम है , जिसे पायथन चुपचाप एक को बढ़ावा देगा long
एएफएफ

29
यदि आपको एल्गोरिथ्म में "एक बहुत बड़े मूल्य" का उपयोग करने की आवश्यकता है, जैसे कि सामान्य संग्रह का न्यूनतम या अधिकतम पता लगाना, float('inf')या float('-inf')काफी मददगार हो सकता है।
जियोऑफ

जवाबों:


852

अजगर ३

पायथन 3 में, यह प्रश्न लागू नहीं होता है। सादा intप्रकार अनबिके है।

हालांकि, आप वास्तव में वर्तमान दुभाषिया के शब्द आकार के बारे में जानकारी की तलाश में हो सकते हैं , जो ज्यादातर मामलों में मशीन के शब्द आकार के समान होगा। वह जानकारी अभी भी पायथन 3 में उपलब्ध है sys.maxsize, जो कि एक हस्ताक्षरित शब्द द्वारा दर्शाने वाला अधिकतम मूल्य है। समान रूप से, यह सबसे बड़ी संभावित सूची या इन-मेमोरी अनुक्रम का आकार है

आम तौर पर, एक अहस्ताक्षरित शब्द द्वारा दर्शाया जाने वाला अधिकतम मूल्य होगा sys.maxsize * 2 + 1, और एक शब्द में बिट्स की संख्या होगी math.log2(sys.maxsize * 2 + 2)। अधिक जानकारी के लिए यह उत्तर देखें ।

अजगर २

पायथन 2 में, सादे intमूल्यों के लिए अधिकतम मूल्य निम्नानुसार उपलब्ध है sys.maxint:

>>> sys.maxint
9223372036854775807

आप यहां-sys.maxint - 1 दिखाए गए अनुसार न्यूनतम मूल्य की गणना कर सकते हैं

एक बार जब आप इस मान को पार कर लेते हैं, तो अजगर सीधे सादे से लंबे पूर्णांक में बदल जाता है। इसलिए अधिकांश समय, आपको इसे जानने की आवश्यकता नहीं होगी।


177
यह संख्या मनमानी प्रतीत हो सकती है, लेकिन ऐसा नहीं है। 922337203685474775807 बिल्कुल है 2^63 - 1, इसलिए आपको 64-बिट इंट मिल गया है। सामान्य तौर पर, एन-बिट पूर्णांक में मानों से लेकर होता -2^(n-1)है 2^(n-1) - 1
NullUserException

22
ध्यान दें कि यदि आप एक 32-बिट पायथन रनटाइम का उपयोग कर रहे हैं, तो sys.maxint वापस आ जाएगा 2^31 - 1, भले ही पायथन longडेटाटाइप के साथ 64-बिट तक कूद जाएगा ।
स्कॉट स्टैफोर्ड

19
sys.maxsizeइसके बजाय, @ आकाश राणा द्वारा सुझाए अनुसार उपयोग करें । यह भी अजगर 2 में मौजूद है के रूप में sysकिए गए दस्तावेज़ों का कहना है। यह दोनों पायथन संस्करणों के साथ कोड को अधिक सुसंगत बना देगा।
आयोनिस फिलिपिपिडिस

6
आपके और मेरे पास डॉक्स से अलग लाइन है। प्रतिस्थापन 2to3एक त्वरित त्वरित और गंदे विधर्मी है जो अधिकांश समय कुछ भी नहीं तोड़ेगा - लेकिन इन दो मूल्यों के बीच का अंतर मायने रखता है। सबसे अच्छा अभ्यास वह मूल्य है जिसका उपयोग आप वास्तव में उपयोग करने के लिए करते हैं। यदि आपको वास्तव sys.maxint में अजगर 2 की आवश्यकता है, तो आपको अब पायथन 3 में इसकी आवश्यकता नहीं होगी, और इसे वास्तव में पूरी तरह से हटा दिया जाना चाहिए, इसे नहीं बदला गया sys.maxsize
प्रेषक

3
minisize - Bitwise min ऑपरेटर के साथ गुणा करना minsize ~ sys.maxsize देता है
om471987

238

यदि आपको ऐसे नंबर की आवश्यकता है जो अन्य सभी की तुलना में बड़ा है, तो आप उपयोग कर सकते हैं

float('inf')

इसी तरह के फैशन में, अन्य सभी की तुलना में छोटी संख्या:

float('-inf')

यह अजगर 2 और 3 दोनों में काम करता है।


9
बस एक नोट थियो (अप्रासंगिक है, लेकिन फिर भी): फ्लोट ('inf')> फ्लोट ('inf') परिणाम 'गलत' है। अनंत संख्या एक और अनंत संख्या से बड़ी होनी चाहिए :-D ... माइंड स्नैप्स
Scre

11
@ क्या आप और क्या उम्मीद करेंगे? x > xआमतौर पर है False, और अनंत कोई अपवाद नहीं होना चाहिए। ( float('NaN), दूसरी ओर ...)
jamesdlin

6
यह वास्तव में intcauze के लिए लागू नहीं होता है cannot convert infinite float to int... लेकिन ज्यादातर मामलों के लिए काम करता है
Leighton

5
ध्यान दें कि int('inf')काम नहीं करता है।
टॉम हेल

3
यह ओपी प्रश्न का उत्तर नहीं है
घोष

225

sys.maxintलगातार अजगर 3.0 से हटा दिया गया आगे, बजाय का उपयोग sys.maxsize

पूर्णांकों

  • पीईपी 237: अनिवार्य रूप से, लंबे समय से नाम बदलकर इंट। यही है, केवल एक अंतर्निर्मित अभिन्न प्रकार है, जिसका नाम इंट है; लेकिन यह ज्यादातर पुराने लंबे प्रकार की तरह व्यवहार करता है।
  • PEP 238: 1/2 की तरह एक अभिव्यक्ति एक फ्लोट देता है। ट्रंचिंग व्यवहार प्राप्त करने के लिए 1 // 2 का उपयोग करें। (बाद का सिंटैक्स वर्षों से मौजूद है, कम से कम पाइथन 2.2 से।)
  • Sys.maxint स्थिरांक को हटा दिया गया था, क्योंकि पूर्णांकों के मान की कोई सीमा नहीं है। हालाँकि, sys.maxsize को किसी भी व्यावहारिक सूची या स्ट्रिंग इंडेक्स से बड़े पूर्णांक के रूप में उपयोग किया जा सकता है। यह कार्यान्वयन के "प्राकृतिक" पूर्णांक आकार के अनुरूप है और आम तौर पर एक ही मंच पर पिछले रिलीज में sys.maxint के समान है (एक ही बिल्ड विकल्प मानते हुए)।
  • एक लंबे पूर्णांक के repr () में अनुगामी L और शामिल नहीं होता है, इसलिए यह कोड बिना शर्त के उस वर्ण को अंतिम अंक से काट देगा। (इसके बजाय str () का उपयोग करें)
  • ऑक्टल शाब्दिक रूप अब 0720 नहीं हैं; इसके बजाय 0o720 का उपयोग करें।

देखें: https://docs.python.org/3/whatsnew/3.0.html#integers


1
सही बात। दरअसल, से help(sys): अधिकतम - कंटेनरों की सबसे बड़ी समर्थित लंबाई । यह स्वीकृत उत्तर होना चाहिए।
मार्को सुल्ला

77

पायथन पूर्णांकों में स्वचालित रूप से एक निश्चित-आकार के intप्रतिनिधित्व से एक चर चौड़ाई प्रतिनिधित्व में स्विच हो जाएगा longजब आप मूल्य पास करते हैं sys.maxint, जो आपके मंच के आधार पर 2 31 - 1 या 2 63 - 1 है। ध्यान दें Lकि यहाँ जोड़ा जाता है:

>>> 9223372036854775807
9223372036854775807
>>> 9223372036854775808
9223372036854775808L

से अजगर मैनुअल :

अंक संख्यात्मक शाब्दिक या अंतर्निहित कार्यों और ऑपरेटरों के परिणाम के रूप में बनाए जाते हैं। जब तक वे निरूपित मूल्य को सादे पूर्णांक के रूप में प्रदर्शित करने के लिए बहुत बड़े नहीं होते हैं, तब तक असमान पूर्णांक शाब्दिक (बाइनरी, हेक्स और ऑक्टल नंबरों सहित) सादे पूर्णांक प्राप्त करते हैं, जिस स्थिति में वे एक लंबे पूर्णांक का उत्पादन करते हैं। एक 'L'या 'l'प्रत्यय के साथ इंटीग्रल शाब्दिक लंबे पूर्णांक प्राप्त करता है ( 'L'इसे पसंद किया जाता है क्योंकि 1lग्यारह की तरह बहुत अधिक लगता है!)।

पायथन अपने पूर्णांक का ढोंग करने की बहुत कोशिश करता है और गणितीय पूर्णांक होते हैं। उदाहरण के लिए, यह आसानी से एक गोगोल की गणना कर सकता है:

>>> 10**100
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L

36
भ्रम में जोड़ने के लिए, पायथन longजावा की तरह नहीं है long- यह बल्कि इसके करीब है BigInteger
NullUserException

Python3 में, लगता है कि कोई Lप्रत्यय नहीं है, और यह सिर्फ है int, नहीं long, चाहे कितनी बड़ी संख्या हो।
एरिक वांग

39

पायथन 3 के लिए, यह है

import sys
max = sys.maxsize
min = -sys.maxsize - 1

3
अजगर 3 मौजूद नहीं है। देखें stackoverflow.com/questions/13795758/…
netskink

33
ठीक है, अजगर 3 मौजूद है , शुक्र है (!); लेकिन sys.maxintअजगर 3 (टीएल; डीआर) में मौजूद नहीं है: " sys.maxintस्थिर हटा दिया गया थाsys.maxsize (अजगर 3 में), क्योंकि अब पूर्णांकों के मूल्य की कोई सीमा नहीं है। हालांकि, किसी भी व्यावहारिक सूची या स्ट्रिंग से बड़ा पूर्णांक के रूप में इस्तेमाल किया जा सकता है सूचकांक। " )
माइकल

2
ऐसे चरों का निर्माण क्यों करें जो छाया के निर्माण का निर्माण करते हैं जैसे min()और max()?
रोडरनर - MSFT

1
2 की तारीफ देखें बाइनरी
netskink

2
min = ~sys.maxsize
एंड्रयू


5

यदि आप सरणी या सूची सूचकांकों ( size_tC / C ++ के बराबर) के लिए अधिकतम चाहते हैं , तो आप numpy का उपयोग कर सकते हैं:

np.iinfo(np.intp).max

sys.maxsizeहालाँकि यह उतना ही लाभकारी है कि आपको इसके लिए आयात sys की आवश्यकता नहीं है।

यदि आप मशीन पर देशी इंट के लिए अधिकतम चाहते हैं:

np.iinfo(np.intc).max

आप डॉक्टर में अन्य उपलब्ध प्रकारों को देख सकते हैं ।

फ्लोट्स के लिए भी आप उपयोग कर सकते हैं sys.float_info.max


2

मैं इस तरह के आदेशों पर बहुत भरोसा करता हूं।

python -c 'import sys; print(sys.maxsize)'

अधिकतम इंट: 9223372036854775807

'Sys' के लिए अधिक संदर्भों के लिए आपको एक्सेस करना चाहिए

https://docs.python.org/3/library/sys.html

https://docs.python.org/3/library/sys.html#sys.maxsize


1
नहीं - अधिकतम आकार केवल सबसे बड़ा संभव कंटेनर इंडेक्स है। पायथन खुशी से 100 अंकों के पूर्णांक और अधिक के साथ काम करेगा
टोनी सफ़ोकल 66
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.