2012-04-19 4 views
2

파이썬 2.x에서 부분적으로 정렬 된 튜플이 있습니다.Python 2.x sorted puzzlement

왜 파이썬은 그것을 정렬하지 않고 리버스합니까?

>>> data = (u'a', (1,), 'b ', u'b', (2,), 'c ', u'c', (3,), 'd ', u'd', (4,), 'e') 
>>> sorted(data) == list(reversed(data)) 
True 

는 파이썬 3

+0

이 질문은 실제 질문입니까, 아니면 Python 2.x의 버크 (quirk)에 대한 편집 방법일까요? 당신은 다른 유형을 비교하는 것이 어리석기 때문에 이것이라고 알고 있습니다. 파이썬 3.x에서는 시도해 볼 때 예외가 생깁니다. 이와 같이 정의 된 동작의 경계를 밀면 언제든지 기묘한 단점을 발견 할 수 있습니다. "나는 파이썬 3을 기대합니다." – steveha

+0

나는 오랫동안 독특한 "groupby (sorted (..))"에 의존하기 때문에 놀랐다. 나는 그것에 대답했을 때 http://stackoverflow.com/questions/10227074/python-max-function 예, 질문보다 놀랍습니다. – hynekcer

답변

11

정렬 알고리즘은 전이 <을 의미 요소의 전체 순서에 의존하기 때문에 그것은 실패를 기대합니다.

유니 코드 문자열, 튜플의 순서

, 문자열은 이행되지 않습니다 :

>>> a = 'x' 
>>> b = (1,) 
>>> c = u'x' 
>>> a < b 
True 
>>> b < c 
True 
>>> a < c 
False 

즉, 목록에 대한 유효한 종류가 존재하지 않습니다. 적어도 기본 비교기는 아닙니다.

+1

Deestan : 문장을 주셔서 감사합니다 ** 정렬은 전이 "<"**에 달려 있습니다. 최악의 상황은'a, b, c = 'x', (1,), u'x'''가'a hynekcer