मैं पायथन में एक अनंत संख्या का प्रतिनिधित्व कैसे कर सकता हूं?


558

मैं अजगर में एक अनंत संख्या का प्रतिनिधित्व कैसे कर सकता हूं? कोई भी बात जो आप कार्यक्रम में दर्ज करते हैं, कोई भी संख्या अनंत के इस प्रतिनिधित्व से अधिक नहीं होनी चाहिए।


29
math.infअनुकूलन समस्याओं में एक प्रारंभिक मूल्य के रूप में उपयोगी है, क्योंकि यह न्यूनतम रूप से मिनट के साथ काम करता है, जैसे। min(5, math.inf) == 5। उदाहरण के लिए, कम से कम पथ एल्गोरिदम में, आप math.infविशेष मामले की आवश्यकता के बिना अज्ञात दूरी तय कर सकते हैं Noneया ऊपरी बाध्य मान सकते हैं 9999999। इसी तरह, आप -math.infअधिकतम समस्याओं के लिए शुरुआती मूल्य के रूप में उपयोग कर सकते हैं ।
कर्नल पैनिक

ज्यादातर मामलों में, अनुकूलन समस्याओं में math.inf का उपयोग करने का एक विकल्प पहले मूल्य के साथ शुरू करना है।
टोबियास बर्गकविस्ट

जवाबों:


706

पायथन में, आप कर सकते हैं:

test = float("inf")

पायथन 3.5 में, आप कर सकते हैं:

import math
test = math.inf

और तब:

test > 1
test > 10000
test > x

हमेशा सच रहेगा। जब तक निश्चित रूप से, जैसा कि बताया गया है, x भी अनंत या "नेन" ("संख्या नहीं") है।

इसके अतिरिक्त (अजगर केवल 2.x), के लिए एक तुलना में Ellipsis, float(inf)कम है, जैसे:

float('inf') < Ellipsis

सच हो जाएगा।


15
और अगर x भी inf है जो सत्य नहीं होगा।
मैक्सिम एगोरुस्किन

5
ध्यान दें कि अनंत को IEEE 754-1985 ( en.wikipedia.org/wiki/IEEE_754-1985 ) मानदंड में परिभाषित किया गया है , जिस पर कोई भी आधुनिक भाषा निर्भर करेगी। एक और बिंदु यह है कि, इस आदर्श के अनुसार, अनन्तता (स्पष्ट रूप से) एक फ्लोटिंग-पॉइंट संख्या होनी चाहिए। यह समझा सकता है कि पायथन ने इस akward सिंटैक्स को क्यों चुना है।
क्विकबग

3
यह भी सच नहीं होगा यदि x में बिल्ट इन है Ellipsis, जिसमें अनंत सहित हर चीज की तुलना में अधिक है। float("inf") < Ellipsisसही रिटर्न
सिंगलटन

2
पिछले एक के बारे में निश्चित नहीं है, math.inf < ...या कम से कम मेरे लिए float('inf') > Ellipsisफेंकता है TypeError: unorderable types: float() < ellipsis()
पीटर गोल्ड्सबोरो

2
मैं 3.5 पर हूं। शायद 2.x / 3.x चीज़।
पीटर गोल्ड्सबोरो

80

पायथन 3.5 के बाद से आप उपयोग कर सकते हैं math.inf:

>>> import math
>>> math.inf
inf

47

किसी ने भी नकारात्मक अनंत के बारे में स्पष्ट रूप से उल्लेख नहीं किया है, इसलिए मुझे लगता है कि मुझे इसे जोड़ना चाहिए।

सकारात्मक अनंत के लिए (सिर्फ पूर्णता के लिए):

math.inf

नकारात्मक अनंत के लिए:

-math.inf

30

मुझे नहीं पता कि आप क्या कर रहे हैं, लेकिन float("inf")आपको एक फ्लोट इन्फिनिटी देता है, जो किसी भी अन्य संख्या से अधिक है।


27

NumPy लाइब्रेरी में एक अनंतता है from numpy import inf:। नकारात्मक अनंतता प्राप्त करने के लिए व्यक्ति बस लिख सकता है -inf


24

एक और, कम सुविधाजनक, ऐसा करने का तरीका Decimalवर्ग का उपयोग करना है :

from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')

21
आप क्यों नहीं जोड़ते हैं कि यह कम सुविधाजनक क्यों है और किसी को इसका उपयोग क्यों करना चाहिए ?
निकोलो

4
आइए देखें: Decimal('Infinity') == float('inf')रिटर्न True, तो यह बहुत अधिक समान है।
डेनिस मालिनोवस्की

8
@afzal_SH भी float('inf') is float('inf')लौट आयाFalse
nemesisdesign

4
अनंत खुद से भी अलग है, इसलिए आपकी टिप्पणी से मुझे कोई मतलब नहीं था, IMHO
nemesisdesign

5
float('inf') is float('inf')-> False, बस यह मानता है कि वे अलग-अलग उदाहरणों के साथ अलग-अलग ऑब्जेक्ट हैं, लेकिन ऐसा नहीं है कि आंतरिक सामग्री अलग-अलग हैं - वास्तव में @nemesisdesign बताया float('int') == float('int')गया है True। यह समान समस्या है जैसे कि उत्परिवर्तित वस्तुओं की तुलना करना [1,2,3] [1,2,3] और [1,2,3] == [1,2,3], जो क्रम में हैं, गलत हैं। और सच .. अधिक जानकारी देखें: stackoverflow.com/questions/2988017/…
मानो विलाला

13

Python2.x में एक गंदा हैक था जो इस उद्देश्य को पूरा करता था (जब तक इसका उपयोग आवश्यक नहीं हो):

None < any integer < any string

इस प्रकार की जांच i < ''रखती है Trueकिसी भी पूर्णांक के लिए i

यह यथोचित रूप से अजगर 3 में पदावनत किया गया है। अब इस तरह की तुलनाएं खत्म हो गई हैं

TypeError: unorderable types: str() < int()

5
यदि आप वास्तव में इसका उपयोग करते हैं, तो कम से कम इसे कुछ पठनीय नामों में लपेटें:MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
अली रसीम कोकल

5
लेकिन आपको इसका उपयोग नहीं करना है।
जोस्ट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.