Programing

Python 2는 문자열과 int를 어떻게 비교하는가?왜 리스트는 숫자보다 크고 튜플은 리스트보다 큰가?

c10106 2022. 4. 6. 22:22
반응형

Python 2는 문자열과 int를 어떻게 비교하는가?왜 리스트는 숫자보다 크고 튜플은 리스트보다 큰가?

다음 코드 조각은 출력에 주석을 달았다(ideone.com 참조).

print "100" < "2"      # True
print "5" > "9"        # False

print "100" < 2        # False
print 100 < "2"        # True

print 5 > "9"          # False
print "5" > 9          # True

print [] > float('inf') # True
print () > []          # True

왜 출력이 그렇게 되는지 누가 설명해줄래?


이행내역

  • 이 행동은 언어 규격에 의해 강요된 것인가, 아니면 실행자에게 달려 있는 것인가?
  • 주요 Python 구현 간에 차이가 있는가?
  • Python 언어의 버전에 차이가 있는가?

python 2 설명서:

CPython 구현 세부 정보:숫자를 제외한 다른 유형의 개체는 유형 이름에 따라 정렬되며, 적절한 비교를 지원하지 않는 동일한 유형의 개체는 주소에 의해 정렬된다.

두 개의 문자열 또는 두 개의 숫자 유형을 주문하면 예상된 방식으로 순서가 수행된다( 문자열의 사전순서, 정수의 숫자순서).

숫자형과 숫자가 아닌 타입을 주문하면 숫자형이 우선이다.

>>> 5 < 'foo'
True
>>> 5 < (1, 2)
True
>>> 5 < {}
True
>>> 5 < [1, 2]
True

둘 다 숫자가 아닌 두 가지 호환되지 않는 유형을 주문하는 경우, 다음 두 가지 유형은 해당 유형의 알파벳 순서로 정렬된다.

>>> [1, 2] > 'foo'   # 'list' < 'str' 
False
>>> (1, 2) > 'foo'   # 'tuple' > 'str'
True

>>> class Foo(object): pass
>>> class Bar(object): pass
>>> Bar() < Foo()
True

한가지 예외는 항상 새로운 스타일의 수업보다 먼저 오는 구식의 수업이다.

>>> class Foo: pass           # old-style
>>> class Bar(object): pass   # new-style
>>> Bar() < Foo()
False

이 행동은 언어 규격에 의해 강요된 것인가, 아니면 실행자에게 달려 있는 것인가?

언어 사양은 없다.언어 참고문헌에는 다음과 같이 적혀 있다.

그렇지 않으면, 다른 종류의 물체는 항상 불평등하게 비교되고, 일관되나 임의로 주문된다.

그래서 그것은 실행 세부사항이다.

주요 Python 구현 간에 차이가 있는가?

공식 CPython 구현만 사용해 왔기 때문에 이 질문에 대답할 수 없지만 파이피와 같은 파이썬의 다른 구현도 있다.

Python 언어의 버전에 차이가 있는가?

Python 3.x에서는 정수와 문자열을 주문하려고 하면 오류가 발생하도록 동작이 변경되었다.

>>> '10' > 5
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    '10' > 5
TypeError: unorderable types: str() > int()

문자열은 사전 편찬적으로 비교하며, 다른 유형의 문자열은 그 유형 명칭에 의해 비교된다."int"<"string"). 3.x는 두 번째 점을 비반복적으로 만들어 수정한다.

참조URL: https://stackoverflow.com/questions/3270680/how-does-python-2-compare-string-and-int-why-do-lists-compare-as-greater-than-n

반응형