Wie kann ich in Python eine unendliche Zahl darstellen?


559

Wie kann ich eine unendliche Zahl in Python darstellen? Unabhängig davon, welche Zahl Sie in das Programm eingeben, sollte keine Zahl größer sein als diese Darstellung der Unendlichkeit.


29
math.infist als Anfangswert bei Optimierungsproblemen nützlich, da es mit min korrekt funktioniert, z. min(5, math.inf) == 5. Beispielsweise können Sie bei Algorithmen mit kürzesten Pfaden unbekannte Entfernungen festlegen, math.infohne dass ein Sonderfall erforderlich ist Noneoder eine Obergrenze angenommen wird 9999999. Ebenso können Sie -math.infals Startwert für Maximierungsprobleme verwenden.
Colonel Panic

In den meisten Fällen besteht eine Alternative zur Verwendung von math.inf bei Optimierungsproblemen darin, mit dem ersten Wert zu beginnen.
Tobias Bergkvist

Antworten:


707

In Python können Sie Folgendes tun:

test = float("inf")

In Python 3.5 können Sie Folgendes tun:

import math
test = math.inf

Und dann:

test > 1
test > 10000
test > x

Wird immer wahr sein. Es sei denn natürlich, wie bereits erwähnt, ist x auch unendlich oder "nan" ("keine Zahl").

Zusätzlich (Python 2.x ONLY), im Vergleich zu Ellipsis, float(inf)ist weniger, zum Beispiel:

float('inf') < Ellipsis

würde wahr zurückgeben.


15
Und wenn x auch inf ist, wird das nicht wahr sein.
Maxim Egorushkin

5
Beachten Sie, dass Unendlichkeit in der Norm IEEE 754-1985 ( en.wikipedia.org/wiki/IEEE_754-1985 ) definiert ist, auf die sich jede moderne Sprache stützen wird. Ein weiterer Punkt ist, dass nach dieser Norm die Unendlichkeit (offensichtlich) eine Gleitkommazahl sein muss. Dies könnte erklären, warum Python diese akward-Syntax gewählt hat.
Quickbug

3
Es wird auch nicht wahr sein, wenn x das eingebaute ist Ellipsis, das mehr als alles vergleicht, einschließlich der Unendlichkeit. float("inf") < Ellipsisgibt True zurück
Singletoned

2
Ich bin mir nicht sicher über den letzten math.inf < ...oder float('inf') > Ellipsiswerfe einen TypeError: unorderable types: float() < ellipsis(), zumindest für mich.
Peter Goldsborough

2
Ich bin auf 3.5. Wahrscheinlich eine 2.x / 3.x Sache.
Peter Goldsborough

80

Seit Python 3.5 können Sie Folgendes verwenden math.inf:

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

47

Niemand scheint explizit über die negative Unendlichkeit gesprochen zu haben, also denke ich, ich sollte es hinzufügen.

Für eine positive Unendlichkeit (nur der Vollständigkeit halber):

math.inf

Für negative Unendlichkeit:

-math.inf

30

Ich weiß nicht genau, was Sie tun, aber float("inf")Sie erhalten eine Float-Unendlichkeit, die größer ist als jede andere Zahl.


27

In der NumPy-Bibliothek gibt es eine Unendlichkeit : from numpy import inf. Um eine negative Unendlichkeit zu erreichen, kann man einfach schreiben -inf.


24

Eine andere, weniger bequeme Möglichkeit, dies zu tun, ist die Verwendung von Decimalclass:

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

21
Warum fügst du nicht hinzu, warum es weniger bequem ist und warum jemand es verwenden sollte ?
Niccolò

4
Mal sehen: Decimal('Infinity') == float('inf')kehrt zurück True, also ist es ziemlich dasselbe.
Denis Malinovsky

8
@afzal_SH float('inf') is float('inf')kehrt Falseauch zurück
nemesisdesign

4
Unendlichkeit unterscheidet sich sogar von sich selbst, so dass Ihr Kommentar für mich nicht viel Sinn machte, IMHO
nemesisdesign

5
float('inf') is float('inf')-> False, gilt nur, dass es sich um unterschiedliche Objekte mit unterschiedlichen Instanzen handelt, aber nicht, dass die internen Inhalte unterschiedlich sind - tatsächlich, wie @nemesisdesign gezeigt float('int') == float('int')hat True. Dies ist das gleiche Problem wie beim Vergleich von veränderlichen Objekten wie [1,2,3] [1,2,3] und [1,2,3] == [1,2,3], die der Reihe nach falsch sind und True .. Weitere Informationen finden Sie unter: stackoverflow.com/questions/2988017/…
Manoel Vilela

13

In python2.x gab es einen schmutzigen Hack, der diesem Zweck diente (NIEMALS verwenden, es sei denn, dies ist absolut notwendig):

None < any integer < any string

Somit ist die Überprüfung i < ''hält Truefür jede ganze Zahl i.

Es wurde in Python3 einigermaßen veraltet. Nun enden solche Vergleiche mit

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

5
Wenn Sie dies wirklich haben, wickeln Sie es zumindest in einige lesbare Namen wie:MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Ali Rasim Kocal

5
Aber Sie müssen dies nicht verwenden.
Joost

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.