파이썬에서 튜플 비교는 어떻게 작동합니까?


178

저는 Core Python 프로그래밍 책을 읽었으며 저자는 다음과 같은 예를 보여줍니다.

(4, 5) < (3, 5) # Equals false

그래서, 나는 그것이 어떻게 / 왜 거짓과 같은지 궁금합니다. 파이썬은이 두 튜플을 어떻게 비교합니까?

Btw, 그것은 책에서 설명되지 않았습니다.

답변:


190

튜플은 위치별로 비교된다 : 제 1 튜플의 제 1 항목은 제 2 튜플의 제 1 항목과 비교되고; 이들이 동일하지 않으면 (즉, 첫 번째가 두 번째보다 크거나 작 으면) 비교 결과입니다. 그렇지 않으면 두 번째 항목이 고려되고 세 번째 등이 고려됩니다.

일반적인 시퀀스 작업을 참조하십시오 .

동일한 유형의 시퀀스도 비교를 지원합니다. 특히, 튜플과리스트는 해당 요소를 비교하여 사전 식으로 비교됩니다. 즉, 동일하게 비교하려면 모든 요소가 동일하게 비교되어야하며 두 시퀀스의 유형이 동일하고 길이가 같아야합니다.

또한 값 비교 자세한 내용은 :

내장 컬렉션 사이의 사전 비교는 다음과 같이 작동합니다.

  • 두 컬렉션이 동일하게 비교 되려면 동일한 유형이어야하고 길이가 동일해야하며 해당하는 각 요소 쌍이 동일하게 비교되어야합니다 (예 : [1,2] == (1,2)유형이 같지 않기 때문에 false 임).
  • 주문 비교를 지원하는 컬렉션은 첫 번째 같지 않은 요소와 동일하게 정렬됩니다 (예 : [1,2,x] <= [1,2,y]와 동일한 값을 가짐 x <= y). 해당 요소가 존재하지 않으면 더 짧은 콜렉션이 먼저 주문됩니다 (예 [1,2] < [1,2,3]: true).

동일하지 않은 경우 순서는 첫 번째 다른 요소와 동일하게 정렬됩니다. 예를 들어 cmp ([1,2, x], [1,2, y])는 cmp (x, y)와 동일을 반환합니다. 해당 요소가 존재하지 않으면 짧은 시퀀스가 ​​더 작은 것으로 간주됩니다 (예 : [1,2] <[1,2,3]은 True를 반환 함).

주 1 : <>하지 평균과 "이상" "보다 작은"하지만 "이전 인"과 "이후"그래서 (0, 1) "전입니다"(1, 0).

참고 2 : 튜플은 길이에 따라 n 차원 공간에서 벡터 로 간주해서는 안됩니다 .

참고 3 : /programming/36911617/python-2-tuple-comparison 질문 참조 : 첫 번째 요소가 해당 요소보다 큰 경우에만 튜플이 다른 것보다 "더 크다"고 생각하지 마십시오 두 번째에서 하나.


4
이에 대해 이야기 할 때 오해의 소지가 될 수있다 <>. 예를 들어로 (0, 1) < (1, 0)평가됩니다 True.
없음

4
@CMCDragonkai-예. 시도 : x = tuple([0 for _ in range(n)])y에 대해서도 동일하게 수행하십시오. n = 100, 1000, 10,000 및 100,000으로 설정하고 running %timeit x==y은 각각 0.5, 4.6, 43.9 및 443 마이크로 초의 타이밍 값을 제공했는데, 이는 실제로 얻을 수있는 O (n)에 가깝습니다.
Michael Scott Cuthbert

8
@ J.Money 왜 오해의 소지가 있다고 생각하십니까?
Don

1
@CharlieParker <>않는다는 의미는 없다 "작은 다음"과 "더는"하지만 "앞에 오는"와 "다음에 오는"그래서 (0, 1)"전에 온다"(1, 0)

3
@Don 나는 튜플에 어떤 유형의 주문을 부과 해야하는지 명확하지 않다고 생각합니다. 나는 파이썬이 단지 가장 큰 유효 숫자를 먼저 확인하고 주사위를 부수는 움직임으로 숫자로 취급한다고 생각합니다. (요소 적 현명한 방식으로)
Charlie Parker

20

파이썬 문서는 그것을 설명한다.

튜플과리스트는 해당 요소의 비교를 사용하여 사전 식으로 비교됩니다. 즉, 동일하게 비교하려면 각 요소가 동일하게 비교되어야하며 두 시퀀스의 유형이 동일하고 길이가 같아야합니다.


이 답변에서 링크 된 페이지에 인용 된 텍스트가 포함되어 있지 않습니다.
플러그 세척

0

파이썬 2.5 문서는 잘 설명합니다.

튜플과리스트는 해당 요소의 비교를 사용하여 사전 식으로 비교됩니다. 즉, 동일하게 비교하려면 각 요소가 동일하게 비교되어야하고 두 시퀀스의 유형이 동일하고 길이가 같아야합니다.

동일하지 않은 경우 시퀀스는 첫 번째 다른 요소와 동일하게 정렬됩니다. 예를 들어 cmp ([1,2, x], [1,2, y])는 cmp (x, y)와 동일을 반환합니다. 해당 요소가 존재하지 않으면 더 짧은 시퀀스가 ​​먼저 정렬됩니다 (예 : [1,2] <[1,2,3]).

불행히도 최신 버전의 설명서에서 해당 페이지가 사라진 것 같습니다.


0
정수 비교와 관련하여 약간의 혼란이 있었으므로 예제에 더 초보자에게 익숙하다고 설명합니다.

a = ('A','B','C') # see it as the string "ABC" b = ('A','B','D')

A는 해당 ASCII로 변환됩니다 ord('A') #65 다른 요소와 동일한

따라서 >> a>b # True 문자열을 비교하는 것으로 생각할 수 있습니다 (실제로 정확합니다)

정수도 마찬가지입니다.

x = (1,2,2) # see it the string "123" y = (1,2,3) x > y # False

왜냐하면 (1은 1보다 크지 않고, 다음으로 이동하고, 2는 2보다 크지 않고, 다음 2로 이동하면 3보다 작습니다-)

요점은 위의 답변에 언급되어 있습니다.

요소가 알파벳순이 아닌 다른 요소보다 앞에 있다고 생각하십시오.


2
(1,2,3) > (1,2,2)제공True
Vishal Singh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.