2012-04-19 4 views
3

어떻게 목록에있는 항목이 동일한 유형의 최대 기능이 작동하지 않습니다? 예를 들어파이썬 최대 기능

다음 코드 복귀 [1 ', 3']

max([1,52,53],[1,'3']) => [1,'3'] 

답변

6

는 상이한 유형의 객체에 대한 기본 비교 대상 포인터를 주조하여 ID 그들의 유형 (수득를 사용하여 비교하는 정수로). 여기에 소스에 대한 링크 : 내 빌드에 http://hg.python.org/cpython/file/2.7/Objects/object.c#l757

가 여기 유형의 순서입니다 : (복합 제외)

>>> sorted([bool, int, float, long, list, tuple, dict, str, unicode]) 
[<type 'bool'>, <type 'float'>, <type 'int'>, <type 'list'>, <type 'long'>, 
<type 'dict'>, <type 'str'>, <type 'tuple'>, <type 'unicode'>] 

숫자 숫자 값을 기준으로 크로스 타입의 비교를 방법을 비교했다 (즉, float는 int와 비교 될 수 있습니다).

없음 개체가 특별하다. 그것은 다른 모든 것보다 적게 비교합니다.

는 주문 볼 정렬 사용이 모두 함께 넣어 보려면 :

>>> sorted(zoo) 
[None, -5, -5.0, 0, 0.0, -0.0, False, True, 10, 10.0, 11.5, {}, 
{'abc': 10}, {'lmno': 20}, [], [1, 2], [1, 2, 3], [1, [2, 3]], 
'', u'', 'alpha', u'alpha', 'bingo', 'cat',(), (1, 2), 
(1, 2, 3), (1, (2, 3)), u'bingo', u'cat'] 
+0

세부 사항 주셔서 감사합니다 :) –

+0

고마워! 그러나 비교 : [1] <(1)은 거짓을 반환합니다. 왜 그런가? –

+1

@Sagar,'(1)'은 실제로 int입니다. 파이썬 구문에 따르면, 그것을 튜플로 구별하기 위해 쉼표를 가져야하므로'[1] <(1,)'을 시도해보십시오. 그럼에도 불구하고 list와 tuple은 서로 다른 타입의 객체이기 때문에 아마도 그것들의 타입의 id를 사용하여 비교 될 것입니다. 다른 유형의 분류하는 것은 모호하기 때문에'분류 (동물원)'분류되지 않은 보이는 것을 –

5

. 자세한 내용은 Raymond 's answer을 참조하십시오. 이 코드는 예외 올릴 파이썬 3에서

: Python2에서

Traceback (most recent call last): 
    File "prog.py", line 1, in <module> 
    max([1,52,53],[1,'3']) 
TypeError: unorderable types: str() > int() 
+0

미안이 올바르지 않습니다. 기본 비교는 유형의 문자열 표현을 사용하지 않습니다. –

+0

"유형의 문자열 표현"이 무엇인지 자세히 설명해 주시겠습니까? –

+0

'>>> 없음> 1 ' 'FALSE ' –