Я ищу минимальные и максимальные значения для целых чисел в Python. Например, в Java у нас есть Integer.MIN_VALUEи Integer.MAX_VALUE. Есть ли что-то подобное в питоне?
Обратите внимание, что в Python 3 intтип в основном совпадает с longтипом в Python 2, поэтому идея максимума или минимума intполностью исчезает. Это в основном не имеет значения , даже на Python 2.
AGF
8
@agf: это может быть актуально по-разному. Например, в любом алгоритме, который требует сохранить найденное минимальное значение (например, алгоритм сортировки). Минимальное значение может быть инициализировано в sys.maxint, поэтому оно гарантирует, что любое первое найденное значение будет принято как минимальное
Basile Perrenoud
@Toaster, за исключением того, что у вас может быть список, в котором все значения больше, чем, sys.maxintтак как это только максимум для intтипа в Python 2, который Python будет молча рекламировать long.
AGF
30
Если вам нужно использовать «очень большое значение» в алгоритме, например, найти минимум или максимум общей коллекции, float('inf')или это float('-inf')может быть весьма полезно.
В Python 3 этот вопрос не применяется. Простой intтип не ограничен.
Тем не менее, вы можете искать информацию о размере слова текущего интерпретатора , который в большинстве случаев будет равен размеру слова машины. Эта информация по-прежнему доступна в Python 3 as sys.maxsize, что является максимальным значением, представляемым словом со знаком. Эквивалентно, это размер максимально возможного списка или последовательности в памяти .
Как правило, максимальное значение, представляемое беззнаковым словом, будет равно sys.maxsize * 2 + 1количеству битов в слове math.log2(sys.maxsize * 2 + 2). Смотрите этот ответ для получения дополнительной информации.
Python 2
В Python 2 максимальное значение для простых intзначений доступно как sys.maxint:
>>> sys.maxint
9223372036854775807
Вы можете рассчитать минимальное значение с помощью, -sys.maxint - 1как показано здесь .
Python плавно переключается с простых на длинные целые числа, когда вы превышаете это значение. Так что большую часть времени вам не нужно будет это знать.
Это число может показаться произвольным, но это не так. 9223372036854775807 точно 2^63 - 1, так что у вас есть 64-битный Int. Как правило, n-битное целое число имеет значения в диапазоне от -2^(n-1)до 2^(n-1) - 1.
NullUserException
22
Обратите внимание, что если вы используете 32-битную среду исполнения Python, sys.maxint вернется 2^31 - 1, даже если Python легко перейдет на 64-битную версию с типом longданных.
Скотт Стаффорд
19
Используйте sys.maxsizeвместо этого, как предложено @Akash Rana. Он присутствует также в Python 2, какsys говорят документы . Это сделает код более совместимым с обеими версиями Python.
Иоаннис Филиппидис
6
У нас с вами разные толкования этой строки из документов. Замена в 2to3это хорошая быстрая и грязная эвристика, которая ничего не сломит большую часть времени - но разница между этими двумя значениями имеет значение. Лучше всего использовать значение, которое вы на самом деле хотите использовать. Если вам действительно нуженsys.maxint Python 2, он вам больше не понадобится в Python 3, и он действительно должен быть полностью удален, а не заменен на sys.maxsize.
senderle
3
minsize - умножение с помощью побитового оператора min дает minsize ~ sys.maxsize
om471987 14.10.16
240
Если вам просто нужен номер, который больше, чем все остальные, вы можете использовать
float('inf')
аналогичным образом, число меньше, чем все остальные:
Просто примечание, которое (как бы это ни было неважно, но все же): float ('inf')> float ('inf') приводит к 'false'. Бесконечное число должно быть больше, чем другое бесконечное число :-D ...
Scre
11
@Scre Что еще вы ожидаете? x > xобычно False, и бесконечность не должна быть исключением. ( float('NaN)с другой стороны ...)
jamesdlin
6
Это на самом деле не относится к intCauze cannot convert infinite float to int... но работает в большинстве случаев
Лейтон
5
Обратите внимание, что int('inf')это не работает.
Том Хейл
4
Это не ответ на вопрос ОП
Гош
225
sys.maxintКонстанта была удалена из Python 3.0 вперед, вместо того, чтобы использовать sys.maxsize.
Целые
PEP 237: по сути, давно переименован в int. То есть существует только один встроенный тип с именем int; но он ведет себя в основном как старый тип long.
PEP 238: выражение типа 1/2 возвращает число с плавающей точкой. Используйте 1 // 2, чтобы получить усечение. (Последний синтаксис существует годами, по крайней мере, с Python 2.2.)
Константа sys.maxint была удалена, так как больше нет ограничения на значение целых чисел. Однако sys.maxsize можно использовать как целое число, большее, чем любой практический список или строковый индекс. Он соответствует «естественному» целочисленному размеру реализации и, как правило, совпадает с sys.maxint в предыдущих выпусках на той же платформе (при условии, что используются те же параметры сборки).
Repr () длинного целого больше не включает в себя завершающий L, поэтому код, который безоговорочно удаляет этот символ, вместо этого отсекает последнюю цифру. (Вместо этого используйте str ().)
Восьмеричные литералы больше не имеют форму 0720; вместо этого используйте 0o720.
Правильный. Действительно, from help(sys): maxsize - наибольшая поддерживаемая длина контейнеров . Это должен быть принятый ответ.
Марко Сулла,
77
В Python целые числа будут автоматически переключаться из представления фиксированного размера в intпредставление переменной ширины, как longтолько вы передадите значение sys.maxint, которое равно 2 31 - 1 или 2 63 - 1, в зависимости от вашей платформы. Обратите внимание, Lчто здесь добавлено:
Числа создаются числовыми литералами или в результате встроенных функций и операторов. Неукрашенные целочисленные литералы (включая двоичные, шестнадцатеричные и восьмеричные числа) дают простые целые числа, если только значение, которое они обозначают, не слишком велико, чтобы быть представленным в виде простого целого числа, и в этом случае они дают длинное целое число. Целочисленные литералы с суффиксом 'L'или 'l'приводят к длинным целым числам ( 'L'желательно, потому что 1lвыглядит слишком похоже на одиннадцать!).
Python очень старается притвориться, что его целые числа являются математическими и неограниченными. Например, он может легко вычислить гугол :
ну, к счастью , Python 3 существует (!); но sys.maxintне существует в python 3 (tl; dr: " sys.maxintконстанта была удалена (в python3), так как больше нет ограничения на значение целых чисел. Однако, sys.maxsizeможет использоваться как целое число, большее, чем любой практический список или строка index. " )
Майкл
3
Зачем создавать переменные, которые создают тени, такие как min()и max()?
RoadRunner - MSFT
1
Посмотрите бинарный комплимент 2
netskink
2
min = ~sys.maxsize
Андрей
10
Вы можете использовать 'inf' следующим образом:
import math
bool_true =0< math.inf
bool_false =0<-math.inf
int
тип в основном совпадает сlong
типом в Python 2, поэтому идея максимума или минимумаint
полностью исчезает. Это в основном не имеет значения , даже на Python 2.sys.maxint
так как это только максимум дляint
типа в Python 2, который Python будет молча рекламироватьlong
.float('inf')
или этоfloat('-inf')
может быть весьма полезно.Ответы:
Python 3
В Python 3 этот вопрос не применяется. Простой
int
тип не ограничен.Тем не менее, вы можете искать информацию о размере слова текущего интерпретатора , который в большинстве случаев будет равен размеру слова машины. Эта информация по-прежнему доступна в Python 3 as
sys.maxsize
, что является максимальным значением, представляемым словом со знаком. Эквивалентно, это размер максимально возможного списка или последовательности в памяти .Как правило, максимальное значение, представляемое беззнаковым словом, будет равно
sys.maxsize * 2 + 1
количеству битов в словеmath.log2(sys.maxsize * 2 + 2)
. Смотрите этот ответ для получения дополнительной информации.Python 2
В Python 2 максимальное значение для простых
int
значений доступно какsys.maxint
:Вы можете рассчитать минимальное значение с помощью,
-sys.maxint - 1
как показано здесь .Python плавно переключается с простых на длинные целые числа, когда вы превышаете это значение. Так что большую часть времени вам не нужно будет это знать.
источник
2^63 - 1
, так что у вас есть 64-битный Int. Как правило, n-битное целое число имеет значения в диапазоне от-2^(n-1)
до2^(n-1) - 1
.2^31 - 1
, даже если Python легко перейдет на 64-битную версию с типомlong
данных.sys.maxsize
вместо этого, как предложено @Akash Rana. Он присутствует также в Python 2, какsys
говорят документы . Это сделает код более совместимым с обеими версиями Python.2to3
это хорошая быстрая и грязная эвристика, которая ничего не сломит большую часть времени - но разница между этими двумя значениями имеет значение. Лучше всего использовать значение, которое вы на самом деле хотите использовать. Если вам действительно нуженsys.maxint
Python 2, он вам больше не понадобится в Python 3, и он действительно должен быть полностью удален, а не заменен наsys.maxsize
.Если вам просто нужен номер, который больше, чем все остальные, вы можете использовать
аналогичным образом, число меньше, чем все остальные:
Это работает как в Python 2 и 3.
источник
x > x
обычноFalse
, и бесконечность не должна быть исключением. (float('NaN)
с другой стороны ...)int
Cauzecannot convert infinite float to int
... но работает в большинстве случаевint('inf')
это не работает.sys.maxint
Константа была удалена из Python 3.0 вперед, вместо того, чтобы использоватьsys.maxsize
.См. Https://docs.python.org/3/whatsnew/3.0.html#integers.
источник
help(sys)
: maxsize - наибольшая поддерживаемая длина контейнеров . Это должен быть принятый ответ.В Python целые числа будут автоматически переключаться из представления фиксированного размера в
int
представление переменной ширины, какlong
только вы передадите значениеsys.maxint
, которое равно 2 31 - 1 или 2 63 - 1, в зависимости от вашей платформы. Обратите внимание,L
что здесь добавлено:Из руководства по Python :
Python очень старается притвориться, что его целые числа являются математическими и неограниченными. Например, он может легко вычислить гугол :
источник
long
не похож на Javalong
- он скорее ближеBigInteger
.L
суффикса, и это простоint
, нетlong
, независимо от того, насколько большое число.Для Python 3 это
источник
sys.maxint
не существует в python 3 (tl; dr: "sys.maxint
константа была удалена (в python3), так как больше нет ограничения на значение целых чисел. Однако,sys.maxsize
может использоваться как целое число, большее, чем любой практический список или строка index. " )min()
иmax()
?min = ~sys.maxsize
Вы можете использовать 'inf' следующим образом:
См .: математика - математические функции
источник
math.inf
эквивалентноfloat('inf')
Если вы хотите получить максимум для индексов массива или списка (эквивалентно
size_t
C / C ++), вы можете использовать numpy:Это так же как
sys.maxsize
преимущество в том, что вам не нужно импортировать sys только для этого.Если вы хотите max для родного int на машине:
Вы можете посмотреть другие доступные типы в doc. .
Для поплавков вы также можете использовать
sys.float_info.max
.источник
Я сильно полагаюсь на такие команды.
Макс int вернулся: 9223372036854775807
Для получения дополнительных ссылок на 'sys' вы должны получить доступ
https://docs.python.org/3/library/sys.html
https://docs.python.org/3/library/sys.html#sys.maxsize
источник