Je ne suis pas sûr du tout que les entiers Python soient limités. Au moment où vous traversez sys.maxint, il change la représentation interne de int à long, ce qui a une presicion illimitée.
tchap
J'ai demandé parce que j'ai besoin de trouver une valeur minimale parmi un groupe de valeurs une par
une.Je
2
À votre commentaire - j'ai recommandé d'utiliser la fonction intégrée min.
Jiri
5
Vous n'avez pas besoin de la valeur maximale si vous essayez simplement de trouver le minimum, même si vous programmez en C ++ ou dans tout autre langage. Si vous allez de toute façon parcourir tous les éléments, utilisez simplement le premier élément comme valeur de départ. (Mais mieux vaut utiliser la minfonction, si vous voulez vraiment programmer en Python!)
John Y
3
@Sreevisakh: pour la « grande valeur », l' utilisation infini, float("inf"). Ou mieux, utilisez la minfonction intégrée.
Fred Foo
Réponses:
132
Entiers longs:
Il n'y a pas de limite explicitement définie. La quantité d'espace d'adressage disponible constitue une limite pratique.
(Tiré de ce site). Consultez la documentation sur les types numériques où vous verrez cela Long integers have unlimited precision. Dans Python 2, les entiers passeront automatiquement aux longs lorsqu'ils dépassent leur limite:
La valeur maximale d'un int peut être trouvée dans Python 2.x avec sys.maxint. Il a été supprimé dans Python 3, mais sys.maxsizepeut souvent être utilisé à la place. Depuis le journal des modifications :
La constante sys.maxint a été supprimée, car il n'y a plus de limite à la valeur des entiers. Cependant, sys.maxsize peut être utilisé comme un entier plus grand que n'importe quelle liste pratique ou index de chaîne. Il est conforme à la taille entière «naturelle» de l'implémentation et est généralement identique à sys.maxint dans les versions précédentes sur la même plate-forme (en supposant les mêmes options de construction).
et, pour toute personne intéressée par la différence (Python 2.x):
sys.maxint Le plus grand entier positif pris en charge par le type entier normal de Python. C'est au moins 2 ** 31-1. Le plus grand entier négatif est -maxint-1 - l'asymétrie résulte de l'utilisation de l'arithmétique binaire du complément à 2.
sys.maxsize Le plus grand entier positif pris en charge par le type Py_ssize_t de la plate-forme, et donc la taille maximale que peuvent avoir les listes, chaînes, dictionnaires et de nombreux autres conteneurs.
sys.maxsize
Un entier donnant la valeur maximale qu'une variable de type Py_ssize_t peut prendre. Il s'agit généralement de 2 ^ 31 - 1 sur une plate-forme 32 bits et de 2 ^ 63 - 1 sur une plate-forme 64 bits.
flotteurs:
Il y a float("inf")et float("-inf"). Ceux-ci peuvent être comparés à d'autres types numériques:
J'ai essayé le même code mais il affiche toujours le type int en python 3 sur une machine Windows 64 bits. Toute raison valable pour cela.
ManojP le
1
@ManojP C'est parce qu'il n'y a plus de limite à la taille des entiers en Python 3. Voir le premier guillemet. Je vais modifier pour clarifier que l'exemple est Python 2
keyer
39
Python longpeut être arbitrairement grand. Si vous avez besoin d'une valeur supérieure à toute autre valeur, vous pouvez l'utiliser float('inf'), car Python n'a aucun problème à comparer des valeurs numériques de types différents. De même, pour une valeur inférieure à toute autre valeur, vous pouvez utiliser float('-inf').
donc il retourne une très grande valeur n'est-ce pas?
Sreevisakh
4
Il renvoie l'infini à virgule flottante, qui est supérieur à tout nombre fini.
Taymon
4
Je dois dire que cette réponse est certainement la plus proche de la correction en termes de réponse à la question du titre du PO. Autrement dit, "comment obtenir une valeur sentinelle Python qui sera plus grande que toutes vos entrées (ou du moins pas plus petite que la valeur la plus grande)?". J'ai donc voté pour cette réponse, mais je pense que c'est mieux si l'OP apprend à penser en Python à la place.
John Y
D'accord. Cela dit, j'ai été dans une situation où c'était la seule façon de faire ce dont j'avais besoin.
Taymon
21
Réponse directe à la question du titre:
Les entiers sont de taille illimitée et n'ont pas de valeur maximale en Python.
Répondez au cas d'utilisation sous-jacent indiqué:
Selon votre commentaire sur ce que vous essayez de faire, vous pensez actuellement à quelque chose du genre
Ce n'est pas comment penser en Python. Une meilleure traduction en Python (mais toujours pas la meilleure) serait
minval = a[0]# Just use the first valuefor i in range(1, len(a)):
minval = min(a[i], a[i -1])
Notez que ce qui précède n'utilise pas du tout MAXINT. Cette partie de la solution s'applique à n'importe quel langage de programmation: vous n'avez pas besoin de connaître la valeur la plus élevée possible juste pour trouver la plus petite valeur dans une collection.
Mais de toute façon, ce que vous faites vraiment en Python est juste
minval = min(a)
Autrement dit, vous n'écrivez pas du tout une boucle. La min()fonction intégrée obtient le minimum de toute la collection.
longtype en Python 2.x utilise une arithmétique de précision arbitraire et n'a pas de valeur maximale possible. Il est limité par la mémoire disponible. Python 3.x n'a pas de type spécial pour les valeurs qui ne peuvent pas être représentées par l'entier machine natif - tout est intet la conversion est gérée en arrière-plan.
Contrairement à C / C ++, Long en Python a une précision illimitée. Reportez-vous à la section Types numériques en python pour plus d'informations.Pour déterminer la valeur maximale d'un entier, vous pouvez simplement vous référer sys.maxint. Vous pouvez obtenir plus de détails dans la documentation de sys .
Le titre est "Valeur maximale pour un entier long" , pas la valeur maximale du flottant. Donc, sans une explication en quoi cela répond à la question, je considère cette NAA (pas une réponse).
Sнаđошƒаӽ
0
En python3, vous pouvez envoyer la valeur flottante dans la fonction int en obtenant ce numéro 1.7976931348623157e + 308 en représentation entière.
Cela ne fait rien d'utile du tout. Pour illustrer cela, essayez int (sys.float_info.max) +1 et vous obtiendrez juste un entier qui est un de plus, car comme d'autres commentaires l'ont expliqué, Python stocke simplement des entiers de précision illimités.
min
fonction, si vous voulez vraiment programmer en Python!)float("inf")
. Ou mieux, utilisez lamin
fonction intégrée.Réponses:
Entiers longs:
Il n'y a pas de limite explicitement définie. La quantité d'espace d'adressage disponible constitue une limite pratique.
(Tiré de ce site). Consultez la documentation sur les types numériques où vous verrez cela
Long integers have unlimited precision
. Dans Python 2, les entiers passeront automatiquement aux longs lorsqu'ils dépassent leur limite:pour les entiers, nous avons
maxint et maxsize:
La valeur maximale d'un int peut être trouvée dans Python 2.x avec
sys.maxint
. Il a été supprimé dans Python 3, maissys.maxsize
peut souvent être utilisé à la place. Depuis le journal des modifications :et, pour toute personne intéressée par la différence (Python 2.x):
et pour être complet, voici la version Python 3 :
flotteurs:
Il y a
float("inf")
etfloat("-inf")
. Ceux-ci peuvent être comparés à d'autres types numériques:la source
Python
long
peut être arbitrairement grand. Si vous avez besoin d'une valeur supérieure à toute autre valeur, vous pouvez l'utiliserfloat('inf')
, car Python n'a aucun problème à comparer des valeurs numériques de types différents. De même, pour une valeur inférieure à toute autre valeur, vous pouvez utiliserfloat('-inf')
.la source
Réponse directe à la question du titre:
Les entiers sont de taille illimitée et n'ont pas de valeur maximale en Python.
Répondez au cas d'utilisation sous-jacent indiqué:
Selon votre commentaire sur ce que vous essayez de faire, vous pensez actuellement à quelque chose du genre
Ce n'est pas comment penser en Python. Une meilleure traduction en Python (mais toujours pas la meilleure) serait
Notez que ce qui précède n'utilise pas du tout MAXINT. Cette partie de la solution s'applique à n'importe quel langage de programmation: vous n'avez pas besoin de connaître la valeur la plus élevée possible juste pour trouver la plus petite valeur dans une collection.
Mais de toute façon, ce que vous faites vraiment en Python est juste
Autrement dit, vous n'écrivez pas du tout une boucle. La
min()
fonction intégrée obtient le minimum de toute la collection.la source
long
type en Python 2.x utilise une arithmétique de précision arbitraire et n'a pas de valeur maximale possible. Il est limité par la mémoire disponible. Python 3.x n'a pas de type spécial pour les valeurs qui ne peuvent pas être représentées par l'entier machine natif - tout estint
et la conversion est gérée en arrière-plan.la source
Contrairement à C / C ++, Long en Python a une précision illimitée. Reportez-vous à la section Types numériques en python pour plus d'informations.Pour déterminer la valeur maximale d'un entier, vous pouvez simplement vous référer
sys.maxint
. Vous pouvez obtenir plus de détails dans la documentation de sys .la source
Vous pouvez utiliser: la valeur maximale du flottant est
pour négatif
la source
En python3, vous pouvez envoyer la valeur flottante dans la fonction int en obtenant ce numéro 1.7976931348623157e + 308 en représentation entière.
la source