Eu estou procurando valores mínimos e máximos para números inteiros em python. Por exemplo, em Java, temos Integer.MIN_VALUEe Integer.MAX_VALUE. Existe algo parecido com isto em python?
Observe que no Python 3 o inttipo é basicamente o mesmo que longno Python 2; portanto, a ideia de um máximo ou mínimo intdesaparece completamente. É basicamente irrelevante, mesmo no Python 2. #
agf
8
@ AGF: pode ser relevante de várias maneiras. Por exemplo, em qualquer algoritmo que exija salvar o valor mínimo encontrado (como um algoritmo de classificação). O valor mínimo pode ser inicializado em sys.maxint para garantir que qualquer primeiro valor encontrado seja considerado min
Basile Perrenoud
@ Toaster, exceto que você pode ter uma lista em que todos os valores são maiores do que, sys.maxintuma vez que é apenas o máximo para o inttipo no Python 2, que o Python promoverá silenciosamente para a long.
agf
30
Se você precisar usar "um valor muito grande" em um algoritmo, por exemplo, encontrar o mínimo ou o máximo de uma coleção genérica, float('inf')ou float('-inf')pode ser bastante útil.
No Python 3, essa pergunta não se aplica. O inttipo simples é ilimitado.
No entanto, você pode realmente estar procurando informações sobre o tamanho atual da palavra do intérprete , que será o mesmo que o tamanho da palavra da máquina na maioria dos casos. Essa informação ainda está disponível no Python 3 como sys.maxsize, que é o valor máximo representável por uma palavra assinada. Equivalentemente, é o tamanho da maior lista possível ou sequência na memória .
Geralmente, o valor máximo representável por uma palavra não assinada será sys.maxsize * 2 + 1e o número de bits em uma palavra será math.log2(sys.maxsize * 2 + 2). Veja esta resposta para mais informações.
Python 2
No Python 2, o valor máximo para intvalores simples está disponível como sys.maxint:
>>> sys.maxint9223372036854775807
Você pode calcular o valor mínimo com, -sys.maxint - 1como mostrado aqui .
O Python alterna perfeitamente de inteiros simples para longos depois que você excede esse valor. Então, na maioria das vezes, você não precisará saber disso.
Esse número pode parecer arbitrário, mas não é. 9223372036854775807 é exatamente 2^63 - 1, então você tem um int de 64 bits. Em geral, um número inteiro de n bits possui valores que variam de -2^(n-1)a 2^(n-1) - 1.
NullUserException 30/09
22
Observe que, se você estiver usando um tempo de execução Python de 32 bits, o sys.maxint retornará 2^31 - 1, mesmo que o Python vá para 64 bits perfeitamente com o longtipo de dados.
Scott Stafford
19
Use sys.maxsizecomo sugerido por @Akash Rana. Também está presente no Python 2, comosys dizem os documentos . Isso tornará o código mais compatível com as duas versões do Python.
Ioannis Filippidis 27/10/2015
6
Você e eu temos diferentes interpretações dessa linha dos documentos. A substituição 2to3é uma heurística rápida e suja que não quebra nada na maioria das vezes - mas a diferença entre esses dois valores é importante. A melhor prática é usar o valor que você realmente deseja usar. Se você realmente precisasys.maxint no Python 2, não precisará mais dele no Python 3, e ele realmente deve ser completamente removido, não alterado para sys.maxsize.
Senderle
3
minsize - A multiplicação pelo operador min bit a bit fornece minsize ~ sys.maxsize
om471987 14/16
238
Se você só precisa de um número maior que todos os outros, pode usar
float('inf')
de maneira semelhante, um número menor que todos os outros:
Apenas uma nota que (por mais irrelevante que seja, mas ainda assim): float ('inf')> float ('inf') resulta em 'false'. Infinito número deve ser maior do que outro número infinito :-D ... mente snaps
Scre
11
@ Scre O que mais você esperaria? x > xé geralmente False, e o infinito não deve ser exceção. ( float('NaN), por outro lado ...)
jamesdlin 6/17
6
Isso realmente não se aplica para intCauze cannot convert infinite float to int... mas funciona para a maioria dos casos
Leighton
5
Observe que int('inf')não funciona.
Tom Hale
4
Esta não é uma resposta para a pergunta OP
ghosh
225
A sys.maxintconstante foi removida do Python 3.0 em diante, em vez disso, use sys.maxsize.
Inteiros
PEP 237: Essencialmente, renomeado por muito tempo para int. Ou seja, existe apenas um tipo integral interno, chamado int; mas se comporta principalmente como o velho tipo longo.
PEP 238: Uma expressão como 1/2 retorna um float. Use 1 // 2 para obter o comportamento de truncamento. (A última sintaxe existe há anos, pelo menos desde o Python 2.2.)
A constante sys.maxint foi removida, pois não há mais um limite para o valor de números inteiros. No entanto, sys.maxsize pode ser usado como um número inteiro maior que qualquer lista prática ou índice de cadeias. Ele está de acordo com o tamanho inteiro "natural" da implementação e normalmente é o mesmo que sys.maxint em releases anteriores na mesma plataforma (assumindo as mesmas opções de compilação).
O repr () de um número inteiro longo não inclui mais o L à direita, portanto, o código que retira incondicionalmente esse caractere cortará o último dígito. (Use str () em vez disso.)
Literais octais não são mais do formato 0720; use 0o720.
Corrigir. De fato, from help(sys): maxsize - o maior comprimento suportado de contêineres . Essa deve ser a resposta aceita.
Marco Sulla
77
No Python, os números inteiros alternam automaticamente de uma intrepresentação de tamanho fixo para uma longrepresentação de largura variável assim que você passar o valor sys.maxint, que é 2 31 - 1 ou 2 63 - 1, dependendo da sua plataforma. Observe o Lque é anexado aqui:
Os números são criados por literais numéricos ou como resultado de funções e operadores internos. Literais inteiros sem adornos (incluindo números binários, hexadecimais e octais) produzem números inteiros simples, a menos que o valor que eles denotem seja muito grande para ser representado como um número inteiro simples; nesse caso, eles produzem um número inteiro longo. Literais inteiros com um sufixo 'L'ou 'l'produzem inteiros longos ( 'L'é preferível porque se 1lparece muito com onze!).
O Python tenta muito fingir que seus números inteiros são números matemáticos e sem limites. Pode, por exemplo, calcular um googol com facilidade:
bem, python 3 existe , felizmente (!); mas sys.maxintnão existe no python 3 (tl; dr: " sys.maxintconstante foi removida (no python3), pois não há mais um limite para o valor de números inteiros. No entanto, sys.maxsizepode ser usado como um número inteiro maior que qualquer lista ou string prática index. " )
michael
2
Por que criar variáveis que sombreiam os componentes internos como min()e max()?
RoadRunner - MSFT
1
Procure o binário do elogio do 2
netskink 6/06/19
2
min = ~sys.maxsize
Andrew
10
Você pode usar 'inf' assim:
import math
bool_true =0< math.inf
bool_false =0<-math.inf
int
tipo é basicamente o mesmo quelong
no Python 2; portanto, a ideia de um máximo ou mínimoint
desaparece completamente. É basicamente irrelevante, mesmo no Python 2. #sys.maxint
uma vez que é apenas o máximo para oint
tipo no Python 2, que o Python promoverá silenciosamente para along
.float('inf')
oufloat('-inf')
pode ser bastante útil.Respostas:
Python 3
No Python 3, essa pergunta não se aplica. O
int
tipo simples é ilimitado.No entanto, você pode realmente estar procurando informações sobre o tamanho atual da palavra do intérprete , que será o mesmo que o tamanho da palavra da máquina na maioria dos casos. Essa informação ainda está disponível no Python 3 como
sys.maxsize
, que é o valor máximo representável por uma palavra assinada. Equivalentemente, é o tamanho da maior lista possível ou sequência na memória .Geralmente, o valor máximo representável por uma palavra não assinada será
sys.maxsize * 2 + 1
e o número de bits em uma palavra serámath.log2(sys.maxsize * 2 + 2)
. Veja esta resposta para mais informações.Python 2
No Python 2, o valor máximo para
int
valores simples está disponível comosys.maxint
:Você pode calcular o valor mínimo com,
-sys.maxint - 1
como mostrado aqui .O Python alterna perfeitamente de inteiros simples para longos depois que você excede esse valor. Então, na maioria das vezes, você não precisará saber disso.
fonte
2^63 - 1
, então você tem um int de 64 bits. Em geral, um número inteiro de n bits possui valores que variam de-2^(n-1)
a2^(n-1) - 1
.2^31 - 1
, mesmo que o Python vá para 64 bits perfeitamente com olong
tipo de dados.sys.maxsize
como sugerido por @Akash Rana. Também está presente no Python 2, comosys
dizem os documentos . Isso tornará o código mais compatível com as duas versões do Python.2to3
é uma heurística rápida e suja que não quebra nada na maioria das vezes - mas a diferença entre esses dois valores é importante. A melhor prática é usar o valor que você realmente deseja usar. Se você realmente precisasys.maxint
no Python 2, não precisará mais dele no Python 3, e ele realmente deve ser completamente removido, não alterado parasys.maxsize
.Se você só precisa de um número maior que todos os outros, pode usar
de maneira semelhante, um número menor que todos os outros:
Isso funciona nos python 2 e 3.
fonte
x > x
é geralmenteFalse
, e o infinito não deve ser exceção. (float('NaN)
, por outro lado ...)int
Cauzecannot convert infinite float to int
... mas funciona para a maioria dos casosint('inf')
não funciona.A
sys.maxint
constante foi removida do Python 3.0 em diante, em vez disso, usesys.maxsize
.Consulte: https://docs.python.org/3/whatsnew/3.0.html#integers
fonte
help(sys)
: maxsize - o maior comprimento suportado de contêineres . Essa deve ser a resposta aceita.No Python, os números inteiros alternam automaticamente de uma
int
representação de tamanho fixo para umalong
representação de largura variável assim que você passar o valorsys.maxint
, que é 2 31 - 1 ou 2 63 - 1, dependendo da sua plataforma. Observe oL
que é anexado aqui:No manual do Python :
O Python tenta muito fingir que seus números inteiros são números matemáticos e sem limites. Pode, por exemplo, calcular um googol com facilidade:
fonte
long
não é como o Javalong
- é um pouco mais próximoBigInteger
.L
sufixo, e é apenasint
, nãolong
, não importa o tamanho do número.Para Python 3, é
fonte
sys.maxint
não existe no python 3 (tl; dr: "sys.maxint
constante foi removida (no python3), pois não há mais um limite para o valor de números inteiros. No entanto,sys.maxsize
pode ser usado como um número inteiro maior que qualquer lista ou string prática index. " )min()
emax()
?min = ~sys.maxsize
Você pode usar 'inf' assim:
Consulte: math - Funções matemáticas
fonte
math.inf
é equivalente afloat('inf')
Se você deseja o máximo para os índices de matriz ou lista (equivalente a
size_t
C / C ++), pode usar numpy:Isso é o mesmo que,
sys.maxsize
no entanto, a vantagem é que você não precisa de sistemas de importação apenas para isso.Se você deseja max para int nativo na máquina:
Você pode ver outros tipos disponíveis no doc .
Para carros alegóricos, você também pode usar
sys.float_info.max
.fonte
Eu confio muito em comandos como este.
Máx. Int retornado: 9223372036854775807
Para mais referências para 'sys' você deve acessar
https://docs.python.org/3/library/sys.html
https://docs.python.org/3/library/sys.html#sys.maxsize
fonte