정수의 최대 값 및 최소값


745

파이썬에서 정수의 최소값과 최대 값을 찾고 있습니다. 예를 들어., 자바, 우리가 Integer.MIN_VALUE하고 Integer.MAX_VALUE. 파이썬에서 이와 같은 것이 있습니까?


14
Python 3에서 int형식은 기본적으로 longPython 2 의 형식 과 동일 하므로 최대 또는 최소 개념이 int완전히 사라집니다. 파이썬 2에서도 기본적으로 관련이 없습니다.
agf

8
@agf : 다양한 방식으로 관련 될 수 있습니다. 예를 들어, 정렬 알고리즘과 같이 발견 된 최소값을 저장해야하는 알고리즘에서. 최소값은 sys.maxint에서 초기화 될 수 있으므로 발견 된 모든 첫 번째 값은 최소값으로 유지됩니다.
Basile Perrenoud

@Toaster는 Python 2 sys.maxintint유형에 대한 최대 값 이므로 모든 값이 더 큰 목록을 가질 수 있다는 점을 제외하면 Python은 자동으로로 승격합니다 long.
agf

30
알고리즘에서 "매우 큰 값"을 사용해야하는 경우 (예 : 일반 컬렉션의 최소 또는 최대 찾기), float('inf')또는 float('-inf')매우 유용 할 수 있습니다.
geoff

답변:


853

파이썬 3

파이썬 3에서는이 질문이 적용되지 않습니다. 일반 int유형은 제한이 없습니다.

그러나 실제로 현재 통역사의 단어 크기 에 대한 정보를 찾고 있을 수 있습니다. 대부분의 경우 기계의 단어 크기와 같습니다. 이 정보는 Python 3에서 여전히 사용할 수 있으며 sys.maxsize이는 부호있는 단어로 표현할 수있는 최대 값입니다. 마찬가지로, 가능한 가장 큰 목록 또는 인 메모리 시퀀스 의 크기입니다 .

일반적으로 부호없는 단어로 표시 할 수있는 최대 값은 sys.maxsize * 2 + 1이고 단어의 비트 수는입니다 math.log2(sys.maxsize * 2 + 2). 자세한 내용은 이 답변 을 참조하십시오.

파이썬 2

Python 2에서 일반 int값 의 최대 값은 다음과 sys.maxint같습니다.

>>> sys.maxint
9223372036854775807

여기에-sys.maxint - 1 표시된대로 최소값을 계산할 수 있습니다 .

이 값을 초과하면 Python은 일반 정수에서 긴 정수로 완벽하게 전환됩니다. 따라서 대부분의 경우 알 필요가 없습니다.


177
이 숫자는 임의의 것처럼 보이지만 그렇지 않습니다. 9223372036854775807은 정확히 2^63 - 1이므로 64 비트 정수가 있습니다. 일반적으로 n 비트 정수는 -2^(n-1)~ 범위의 값을 갖 습니다 2^(n-1) - 1.
NullUserException

22
32 비트 Python 런타임을 사용하는 경우 2^31 - 1Python이 long데이터 유형을 사용하여 64 비트로 원활하게 이동하더라도 sys.maxint가을 반환 합니다 .
Scott Stafford

19
sys.maxsize@Akash Rana가 제안한대로 대신 사용하십시오 . 문서에서 말하는 것처럼sys 파이썬 2에도 존재 합니다. 이렇게하면 코드가 두 Python 버전 모두와 호환됩니다.
Ioannis Filippidis

6
당신과 나는 그 선에 대한 문서와 다른 해석을 가지고 있습니다. 대체품은 2to3대부분의 시간 동안 아무 것도 깨지 않는 훌륭한 빠르고 더러운 휴리스틱이지만이 두 값의 차이는 중요합니다. 가장 좋은 방법은 실제로 사용하려는 값을 사용하는 것입니다. Python 2에서 정말로 필요한 경우 sys.maxintPython 3에서는 더 이상 필요하지 않으며로 변경되지 않고 실제로 완전히 제거해야합니다 sys.maxsize.
senderle

3
최소 매개 변수 - 비트 단위 분 연산자 배가 최소 매개 변수 ~ sys.maxsize 제공
om471987

238

다른 모든 것보다 큰 숫자가 필요하면

float('inf')

비슷한 방식으로 다른 모든 것보다 작은 숫자 :

float('-inf')

이것은 파이썬 2와 3 모두에서 작동합니다.


9
참고 사항 (관련이 없지만 여전히) : float ( 'inf')> float ( 'inf')는 'false'가됩니다. 무한 수는 다른 무한 수보다
커야합니다. -D

11
@Scre 다른 무엇을 기대하십니까? x > x일반적 False으로이며 무한대도 예외는 아닙니다. ( float('NaN), 반면에 ...)
jamesdlin

6
실제로 intcauze 에는 적용되지 않지만 cannot convert infinite float to int... 대부분의 경우에는 작동합니다.
Leighton

5
참고 int('inf')작동하지 않습니다.
Tom Hale

3
이것은 OP 질문에 대한 답변이 아닙니다
ghosh

225

sys.maxint상수는 이후 대신 사용 파이썬 3.0에서 제거되었습니다 sys.maxsize.

정수

  • PEP 237 : 기본적으로 긴 이름이 int로 바뀌 었습니다. 즉, int라는 하나의 내장 정수 유형 만 있습니다. 그러나 그것은 주로 오래 된 긴 유형처럼 행동합니다.
  • PEP 238 : 1/2와 같은 표현식은 부동 소수점을 반환합니다. 절단 동작을 얻으려면 1/2을 사용하십시오. (후자의 구문은 적어도 Python 2.2 이후 수년간 존재했습니다.)
  • 더 이상 정수 값에 대한 제한이 없으므로 sys.maxint 상수가 제거되었습니다. 그러나 sys.maxsize는 실제 목록 또는 문자열 인덱스보다 큰 정수로 사용할 수 있습니다. 구현의 "자연적인"정수 크기를 따르며 일반적으로 동일한 빌드 옵션에서 동일한 플랫폼의 이전 릴리스에서 sys.maxint와 동일합니다.
  • 긴 정수의 repr ()은 더 이상 후행 L을 포함하지 않으므로 해당 문자를 무조건 제거하는 코드는 대신 마지막 숫자를 잘라냅니다. 대신에 str ()을 사용하십시오.
  • 8 진 리터럴은 더 이상 0720 형식이 아닙니다. 대신 0o720을 사용하십시오.

참조 : https://docs.python.org/3/whatsnew/3.0.html#integers


1
옳은. 실제로 from help(sys): maxsize-지원되는 최대 컨테이너 길이입니다 . 이것이 정답입니다.
Marco Sulla

77

파이썬에서는 정수가 플랫폼에 따라 2 31-1 또는 2 63-1 인 값을 전달하면 고정 크기 int표현에서 가변 폭 long표현 으로 자동 전환 됩니다. 통지 여기에 추가 가도록를 :sys.maxintL

>>> 9223372036854775807
9223372036854775807
>>> 9223372036854775808
9223372036854775808L

로부터 파이썬 설명서 :

숫자는 숫자 리터럴 또는 내장 함수 및 연산자의 결과로 생성됩니다. 표시되지 않은 정수 리터럴 (2 진, 16 진 및 8 진수 포함)은 표시하는 값이 너무 커서 일반 정수로 표현할 수없는 경우 일반 정수를 생성합니다.이 경우 긴 정수를 생성합니다. 'L'또는 'l'접미사 가있는 정수 리터럴은 긴 정수를 생성합니다 ( 11보다 너무 많이 보이기 'L'때문에 선호됩니다 1l).

파이썬은 정수가 수학적인 정수이며 끝이 없다고 가장 열심히 노력합니다. 예를 들어, googol 을 쉽게 계산할 수 있습니다.

>>> 10**100
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L

36
혼란을 더하기 위해 Python long은 Java와 다르지 않습니다 long-오히려 더 가깝습니다 BigInteger.
NullUserException

python3에서는 L접미사 가 없으며 숫자가 아무리 크더라도 그냥 int그렇지 않습니다 long.
에릭 왕

39

파이썬 3의 경우

import sys
max = sys.maxsize
min = -sys.maxsize - 1

3
파이썬 3가 존재하지 않습니다. 참조 stackoverflow.com/questions/13795758/...
netskink

34
글쎄, 파이썬 3는 존재합니다 . 고맙게도 (!); 그러나 sys.maxint파이썬 3에는 존재하지 않습니다 (tl; dr : " sys.maxint정수 값에 더 이상 제한이 없기 때문에 상수가 제거되었습니다 (python3에서). 그러나 sys.maxsize실제 목록이나 문자열보다 큰 정수로 사용할 수 있습니다 index. " )
michael

2
왜 그림자와 같은 내장 명령 있다는 변수를 생성 min()하고 max()?
RoadRunner-MSFT

1
2의 칭찬 바이너리를 찾으십시오
netskink

2
min = ~sys.maxsize
Andrew


5

배열 또는 목록 인덱스의 최대 값 ( size_tC / C ++ 과 동일)을 원하면 numpy를 사용할 수 있습니다.

np.iinfo(np.intp).max

이것은와 동일 sys.maxsize장점은 바로 이것에 대한 수입에서 sys 필요가 없다는 것입니다 그러나.

머신에서 native int에 대해 max를 원한다면 :

np.iinfo(np.intc).max

doc 에서 사용 가능한 다른 유형을 볼 수 있습니다 .

플로트의 경우을 사용할 수도 있습니다 sys.float_info.max.


2

나는 이런 명령에 크게 의존합니다.

python -c 'import sys; print(sys.maxsize)'

반환되는 최대 int : 9223372036854775807

'sys'에 대한 자세한 내용은 다음을 참조하십시오.

https://docs.python.org/3/library/sys.html

https://docs.python.org/3/library/sys.html#sys.maxsize


1
아니요-maxsize는 단순히 가장 큰 컨테이너 인덱스입니다. 파이썬은 100 자리 이상의 정수와 함께 행복하게 작동합니다
Tony Suffolk 66
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.