Ich suche nach minimalen und maximalen Werten für ganze Zahlen in Python. Zum Beispiel haben wir in Java Integer.MIN_VALUEund Integer.MAX_VALUE. Gibt es so etwas in Python?
Beachten Sie, dass der intTyp in Python 3 im Grunde der gleiche ist wie der longTyp in Python 2, sodass die Idee eines Maximums oder Minimums intvollständig verschwindet. Es ist im Grunde genommen sogar auf Python 2 irrelevant.
Agf
8
@agf: Es kann auf verschiedene Arten relevant sein. Zum Beispiel in jedem Algorithmus, der den gefundenen Mindestwert speichern muss (wie bei einem Sortieralgorithmus). Der min-Wert könnte bei sys.maxint initialisiert werden, um sicherzustellen, dass jeder zuerst gefundene Wert als min angenommen wird
Basile Perrenoud
@Toaster, außer dass Sie eine Liste haben können, in der alle Werte größer sind als, sys.maxintda dies nur das Maximum für den intTyp in Python 2 ist, den Python stillschweigend auf a hochstuft long.
Agf
30
Wenn Sie in einem Algorithmus "einen sehr großen Wert" verwenden müssen, z. B. das Finden eines Minimums oder Maximums einer generischen Sammlung, float('inf')oder float('-inf')wenn dies sehr hilfreich sein kann.
In Python 3 trifft diese Frage nicht zu. Der einfache intTyp ist unbegrenzt.
Möglicherweise suchen Sie jedoch tatsächlich nach Informationen zur Wortgröße des aktuellen Interpreters , die in den meisten Fällen der Wortgröße des Geräts entspricht. Diese Informationen sind in Python 3 weiterhin verfügbar. Dies sys.maxsizeist der Maximalwert, der durch ein vorzeichenbehaftetes Wort dargestellt werden kann. Entsprechend ist es die Größe der größtmöglichen Liste oder In-Memory- Sequenz .
Im Allgemeinen ist der durch ein vorzeichenloses Wort darstellbare Maximalwert sys.maxsize * 2 + 1und die Anzahl der Bits in einem Wort math.log2(sys.maxsize * 2 + 2). Weitere Informationen finden Sie in dieser Antwort .
Python 2
In Python 2 ist der Maximalwert für einfache intWerte verfügbar als sys.maxint:
>>> sys.maxint
9223372036854775807
Sie können den Mindestwert mit -sys.maxint - 1wie hier gezeigt berechnen .
Python wechselt nahtlos von einfachen zu langen Ganzzahlen, sobald Sie diesen Wert überschreiten. Die meiste Zeit müssen Sie es also nicht wissen.
Diese Zahl mag willkürlich erscheinen, ist es aber nicht. 9223372036854775807 ist genau 2^63 - 1, Sie haben also einen 64-Bit-Int. Im Allgemeinen hat eine n-Bit-Ganzzahl Werte im Bereich von -2^(n-1)bis 2^(n-1) - 1.
NullUserException
22
Beachten Sie, dass sys.maxint bei Verwendung einer 32-Bit-Python-Laufzeit zurückgegeben wird 2^31 - 1, obwohl Python nahtlos mit dem longDatentyp auf 64-Bit springt .
Scott Stafford
19
Verwenden Sie sys.maxsizestattdessen, wie von @Akash Rana vorgeschlagen. Es ist auch in Python 2 vorhanden, wie in den sysDokumenten angegeben . Dadurch wird der Code mit beiden Python-Versionen kompatibler.
Ioannis Filippidis
6
Sie und ich haben andere Interpretationen dieser Zeile als die Dokumente. Der Ersatz in 2to3ist eine feine, schnelle und schmutzige Heuristik, die die meiste Zeit nichts kaputt macht - aber der Unterschied zwischen diesen beiden Werten ist wichtig. Die beste Vorgehensweise besteht darin, den Wert zu verwenden, den Sie tatsächlich verwenden möchten. Wenn Sie essys.maxint in Python 2 wirklich brauchen , brauchen Sie es in Python 3 nicht mehr und es sollte wirklich vollständig entfernt und nicht geändert werden sys.maxsize.
Absender
3
minsize - Multiplizieren mit Bitwise min Operator ergibt minsize ~ sys.maxsize
om471987
238
Wenn Sie nur eine Nummer benötigen, die größer als alle anderen ist, können Sie verwenden
float('inf')
in ähnlicher Weise eine Zahl kleiner als alle anderen:
float('-inf')
Dies funktioniert sowohl in Python 2 als auch in Python 3.
Nur eine Anmerkung (wie irrelevant es ist, aber immer noch): float ('inf')> float ('inf') führt zu 'false'. Die unendliche Zahl sollte größer sein als eine andere unendliche Zahl :-D ... Mind Snaps
Scre
11
@ Scre Was würden Sie sonst noch erwarten? x > xist in der Regel Falseund Unendlichkeit sollte keine Ausnahme sein. ( float('NaN), auf der anderen Seite ...)
Jamesdlin
6
Dies gilt eigentlich nicht für intCauze cannot convert infinite float to int... aber funktioniert in den meisten Fällen
Leighton
5
Beachten Sie, dass int('inf')dies nicht funktioniert.
Tom Hale
4
Dies ist keine Antwort auf die OP-Frage
Ghosh
225
Die sys.maxintKonstante wurde ab Python 3.0 entfernt, stattdessen verwenden sys.maxsize.
Ganzzahlen
PEP 237: Im Wesentlichen lange in int umbenannt. Das heißt, es gibt nur einen integrierten Integraltyp mit dem Namen int. aber es verhält sich meistens wie der alte lange Typ.
PEP 238: Ein Ausdruck wie 1/2 gibt einen Float zurück. Verwenden Sie 1 // 2, um das Abschneideverhalten zu erhalten. (Die letztere Syntax existiert seit Jahren, zumindest seit Python 2.2.)
Die Konstante sys.maxint wurde entfernt, da der Wert von Ganzzahlen nicht mehr begrenzt ist. Sys.maxsize kann jedoch als Ganzzahl verwendet werden, die größer ist als jede praktische Liste oder jeder Zeichenfolgenindex. Es entspricht der „natürlichen“ Ganzzahlgröße der Implementierung und entspricht normalerweise sys.maxint in früheren Versionen auf derselben Plattform (unter der Annahme derselben Erstellungsoptionen).
Das repr () einer langen Ganzzahl enthält kein nachfolgendes L mehr. Code, der dieses Zeichen bedingungslos entfernt, schneidet stattdessen die letzte Ziffer ab. (Verwenden Sie stattdessen str ().)
Oktalliterale haben nicht mehr die Form 0720; Verwenden Sie stattdessen 0o720.
Richtig. In der Tat von help(sys): maxsize - der größten unterstützten Länge von Containern . Dies sollte die akzeptierte Antwort sein.
Marco Sulla
77
In Python wechseln Ganzzahlen automatisch von einer intDarstellung mit fester Größe in eine Darstellung mit variabler Breite long, sobald Sie den Wert übergeben sys.maxint, der je nach Plattform entweder 2 31 - 1 oder 2 63 - 1 beträgt . Beachten Sie das L, was hier angehängt wird:
Zahlen werden durch numerische Literale oder als Ergebnis integrierter Funktionen und Operatoren erstellt. Ungeschmückte Ganzzahlliterale (einschließlich Binär-, Hex- und Oktalzahlen) ergeben einfache Ganzzahlen, es sei denn, der von ihnen angegebene Wert ist zu groß, um als einfache Ganzzahl dargestellt zu werden. In diesem Fall ergeben sie eine lange Ganzzahl. Ganzzahlige Literale mit einem 'L'oder einem 'l'Suffix ergeben lange Ganzzahlen ( 'L'wird bevorzugt, weil sie 1lzu elf aussehen!).
Python ist sehr bemüht, so zu tun, als wären seine ganzen Zahlen mathematische ganze Zahlen und unbegrenzt. Es kann zum Beispiel ein Googol mit Leichtigkeit berechnen :
Nun, Python 3 existiert zum Glück (!); aber ist sys.maxintnicht vorhanden in Python 3 (tl; dr: " sys.maxintkonstant entfernt wurde (in python3), da es nicht länger eine Grenze für den Wert der ganzen Zahlen jedoch. sys.maxsizekann als eine ganze Zahl verwendet werden , die größer als eine praktische Liste oder eine Zeichenfolge index. " )
michael
2
Warum Variablen erstellen, die eingebaute Schatten wie min()und enthalten max()?
RoadRunner - MSFT
1
Schauen Sie nach 2 Kompliment binär
Netskink
2
min = ~sys.maxsize
Andrew
10
Sie können 'inf' wie folgt verwenden:
import math
bool_true =0< math.inf
bool_false =0<-math.inf
int
Typ in Python 3 im Grunde der gleiche ist wie derlong
Typ in Python 2, sodass die Idee eines Maximums oder Minimumsint
vollständig verschwindet. Es ist im Grunde genommen sogar auf Python 2 irrelevant.sys.maxint
da dies nur das Maximum für denint
Typ in Python 2 ist, den Python stillschweigend auf a hochstuftlong
.float('inf')
oderfloat('-inf')
wenn dies sehr hilfreich sein kann.Antworten:
Python 3
In Python 3 trifft diese Frage nicht zu. Der einfache
int
Typ ist unbegrenzt.Möglicherweise suchen Sie jedoch tatsächlich nach Informationen zur Wortgröße des aktuellen Interpreters , die in den meisten Fällen der Wortgröße des Geräts entspricht. Diese Informationen sind in Python 3 weiterhin verfügbar. Dies
sys.maxsize
ist der Maximalwert, der durch ein vorzeichenbehaftetes Wort dargestellt werden kann. Entsprechend ist es die Größe der größtmöglichen Liste oder In-Memory- Sequenz .Im Allgemeinen ist der durch ein vorzeichenloses Wort darstellbare Maximalwert
sys.maxsize * 2 + 1
und die Anzahl der Bits in einem Wortmath.log2(sys.maxsize * 2 + 2)
. Weitere Informationen finden Sie in dieser Antwort .Python 2
In Python 2 ist der Maximalwert für einfache
int
Werte verfügbar alssys.maxint
:Sie können den Mindestwert mit
-sys.maxint - 1
wie hier gezeigt berechnen .Python wechselt nahtlos von einfachen zu langen Ganzzahlen, sobald Sie diesen Wert überschreiten. Die meiste Zeit müssen Sie es also nicht wissen.
quelle
2^63 - 1
, Sie haben also einen 64-Bit-Int. Im Allgemeinen hat eine n-Bit-Ganzzahl Werte im Bereich von-2^(n-1)
bis2^(n-1) - 1
.2^31 - 1
, obwohl Python nahtlos mit demlong
Datentyp auf 64-Bit springt .sys.maxsize
stattdessen, wie von @Akash Rana vorgeschlagen. Es ist auch in Python 2 vorhanden, wie in densys
Dokumenten angegeben . Dadurch wird der Code mit beiden Python-Versionen kompatibler.2to3
ist eine feine, schnelle und schmutzige Heuristik, die die meiste Zeit nichts kaputt macht - aber der Unterschied zwischen diesen beiden Werten ist wichtig. Die beste Vorgehensweise besteht darin, den Wert zu verwenden, den Sie tatsächlich verwenden möchten. Wenn Sie essys.maxint
in Python 2 wirklich brauchen , brauchen Sie es in Python 3 nicht mehr und es sollte wirklich vollständig entfernt und nicht geändert werdensys.maxsize
.Wenn Sie nur eine Nummer benötigen, die größer als alle anderen ist, können Sie verwenden
in ähnlicher Weise eine Zahl kleiner als alle anderen:
Dies funktioniert sowohl in Python 2 als auch in Python 3.
quelle
x > x
ist in der RegelFalse
und Unendlichkeit sollte keine Ausnahme sein. (float('NaN)
, auf der anderen Seite ...)int
Cauzecannot convert infinite float to int
... aber funktioniert in den meisten Fällenint('inf')
dies nicht funktioniert.Die
sys.maxint
Konstante wurde ab Python 3.0 entfernt, stattdessen verwendensys.maxsize
.Siehe: https://docs.python.org/3/whatsnew/3.0.html#integers
quelle
help(sys)
: maxsize - der größten unterstützten Länge von Containern . Dies sollte die akzeptierte Antwort sein.In Python wechseln Ganzzahlen automatisch von einer
int
Darstellung mit fester Größe in eine Darstellung mit variabler Breitelong
, sobald Sie den Wert übergebensys.maxint
, der je nach Plattform entweder 2 31 - 1 oder 2 63 - 1 beträgt . Beachten Sie dasL
, was hier angehängt wird:Aus dem Python-Handbuch :
Python ist sehr bemüht, so zu tun, als wären seine ganzen Zahlen mathematische ganze Zahlen und unbegrenzt. Es kann zum Beispiel ein Googol mit Leichtigkeit berechnen :
quelle
long
nicht wie Javaslong
- es ist eher näher anBigInteger
.L
Suffix zu geben, und es ist einfachint
nichtlong
, egal wie groß die Zahl ist.Für Python 3 ist es
quelle
sys.maxint
nicht vorhanden in Python 3 (tl; dr: "sys.maxint
konstant entfernt wurde (in python3), da es nicht länger eine Grenze für den Wert der ganzen Zahlen jedoch.sys.maxsize
kann als eine ganze Zahl verwendet werden , die größer als eine praktische Liste oder eine Zeichenfolge index. " )min()
und enthaltenmax()
?min = ~sys.maxsize
Sie können 'inf' wie folgt verwenden:
Siehe: Mathematik - Mathematische Funktionen
quelle
math.inf
entsprichtfloat('inf')
Wenn Sie das Maximum für Array- oder
size_t
Listenindizes möchten (entspricht C / C ++), können Sie numpy verwenden:Dies ist derselbe wie der
sys.maxsize
Vorteil, dass Sie kein Importsystem nur dafür benötigen.Wenn Sie max für native int auf dem Computer möchten:
Sie können sich andere verfügbare Typen in doc ansehen .
Für Schwimmer können Sie auch verwenden
sys.float_info.max
.quelle
Ich verlasse mich stark auf solche Befehle.
Max int zurückgegeben: 9223372036854775807
Für weitere Referenzen für 'sys' sollten Sie zugreifen
https://docs.python.org/3/library/sys.html
https://docs.python.org/3/library/sys.html#sys.maxsize
quelle