Python'da sonsuz bir sayıyı nasıl temsil edebilirim?


559

Python'da sonsuz bir sayıyı nasıl temsil edebilirim? Programa hangi sayıyı girerseniz girin, hiçbir sayı sonsuzluğun bu gösteriminden daha büyük olamaz.


29
math.infoptimizasyon problemlerinde başlangıç ​​değeri olarak kullanışlıdır, çünkü min ile doğru şekilde çalışır, örn. min(5, math.inf) == 5. Örneğin, en kısa yol algoritmalarında, bilinmeyen mesafeleri math.infözel bir duruma gerek duymadan Noneveya bir üst sınır varsaymadan ayarlayabilirsiniz 9999999. Benzer şekilde, -math.infmaksimizasyon problemleri için başlangıç ​​değeri olarak kullanabilirsiniz .
Albay Panik

Çoğu durumda, optimizasyon problemlerinde math.inf dosyasını kullanmanın bir alternatifi ilk değerle başlamaktır.
Tobias Bergkvist

Yanıtlar:


707

Python'da şunları yapabilirsiniz:

test = float("inf")

Python 3.5'te şunları yapabilirsiniz:

import math
test = math.inf

Ve sonra:

test > 1
test > 10000
test > x

Her zaman doğru olacak. Elbette belirtildiği gibi, x ayrıca sonsuzluk veya "nan" dir ("bir sayı değil").

Ayrıca bir karşılaştırma, (Python SADECE 2.x) Ellipsis, float(inf)daha az olduğunu, örneğin:

float('inf') < Ellipsis

doğru dönecekti.


15
Ve eğer x de inf ise bu doğru olmayacaktır.
Maxim Egorushkin

5
Sonsuzluğun, herhangi bir modern dilin dayanacağı IEEE 754-1985 ( en.wikipedia.org/wiki/IEEE_754-1985 ) normunda tanımlandığını unutmayın . Başka bir nokta, bu norma göre sonsuzluğun (açık bir şekilde) bir kayan nokta sayısı olması gerektiğidir. Bu, Python'un neden bu sözdizimini seçtiğini açıklayabilir.
quickbug

3
EllipsisSonsuzluk da dahil olmak üzere her şeyden daha büyük olan x yerleşikse de doğru olmaz . float("inf") < EllipsisTrue döndürür
Singletoned

2
En azından benim için sonuncusundan emin değilim math.inf < ...veya float('inf') > Ellipsisatar TypeError: unorderable types: float() < ellipsis().
Peter Goldsborough

2
3.5 yaşındayım. Muhtemelen 2.x / 3.x bir şey.
Peter Goldsborough

80

Python 3.5'ten beri şunları kullanabilirsiniz math.inf:

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

47

Hiç kimse olumsuz sonsuzluktan açıkça bahsetmemiş gibi görünüyor, bu yüzden eklemeliyim.

Pozitif sonsuzluk için (sadece bütünlük uğruna):

math.inf

Negatif sonsuzluk için:

-math.inf

30

Ne yaptığınızı tam olarak bilmiyorum, ama float("inf")size başka bir sayıdan daha büyük bir kayan Sonsuzluk veriyor.


27

NumPy kütüphanesinde bir sonsuzluk vardır: from numpy import inf. Negatif sonsuzluğu elde etmek için yazmak yeterlidir -inf.


24

Bunu yapmanın bir başka, daha az kullanışlı yolu, Decimalsınıfı kullanmaktır :

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

21
neden daha az uygun olduğunu ve neden onu kullanması gerektiğini eklemiyorsun ?
Niccolò

4
Bakalım: Decimal('Infinity') == float('inf')geri dönüyor True, bu yüzden hemen hemen aynı.
Denis Malinovsky

8
@afzal_SH çok float('inf') is float('inf')geri döndüFalse
nemesisdesign

4
sonsuzluk kendisinden bile farklıdır, bu yüzden yorumunuz bana pek mantıklı gelmedi, IMHO
nemesisdesign

5
float('inf') is float('inf')-> False, sadece farklı örneklere sahip farklı nesneler olduklarını, ancak iç içeriğin farklı olmadığını - aslında @ nemesisdesign'ın işaret float('int') == float('int')ettiği gibi True. Bu, [1,2,3] ve [1,2,3] ve [1,2,3] == [1,2,3] gibi değişken nesneleri karşılaştırmak gibi aynı problemdir. and True .. Daha fazla bilgi için: stackoverflow.com/questions/2988017/…
Manoel Vilela

13

Python2.x'te bu amaca hizmet eden kirli bir kesmek vardı (kesinlikle gerekli olmadıkça ASLA kullanmayın):

None < any integer < any string

Böylece kontrol herhangi bir tamsayı i < ''tutar .Truei

Python3'te makul bir şekilde kullanımdan kaldırılmıştır. Şimdi bu karşılaştırmalar

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

5
Bunu gerçekten kullanmanız gerekiyorsa, en azından şu gibi okunabilir adlarla sarın:MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Ali Rasim Kocal

5
Ama bunu kullanmak zorunda değilsiniz.
Joost

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.