2017-11-22 1 views
-5
x=['Hello', 90, 8.9999, 4.6, 'DOG', 'CAT', 1] 
x.reverse() 

x 
Out[109]: ['Hello', 90, 8.9999, 4.6, 'DOG', 'CAT', 1] 

x.sort() 

오류오류 파이썬에서 정렬 작업을하는 동안

Traceback (most recent call last): 

    File "<ipython-input-110-42dad5a67ac3>", line 1, in <module> 
    x.sort() 

TypeError: '<' not supported between instances of 'int' and 'str' 

나는이 오류가있는 이유?

+3

귀하의 목록을 생성합니다 혼합 타입이다. 비교할 수없는 두 요소를 비교하려고하면 비교가 실패합니다. 어떤 순서로 당신이 기다리고 있었습니까! 90 이전이나 이후에 '개'입니까? –

+0

유형 오류 메시지를 읽었습니까? – Paddy

+1

두 가지 유형을 정렬 할 수 없습니다. 예 : 어느 것이 더 큽니까, 정수 5 또는 문자열 "Hello"? –

답변

0

오류에서 알 수 있듯이 type의 내용 만 비교할 수 있습니다. 가서 int/float/str 형식을 수정하여 이러한 비교를 수행 할 수는 있지만 내장 형식의 내부 속성을 망칠 것은 매우 나쁜 생각입니다.

당신이 할 수있는 일은 숫자를 문자열에 캐스트 한 다음 정렬하는 것입니다. 이것은 사전 편집을 수행합니다.

a = ['Hello', 90, 8.9999, 4.6, 'DOG', 'CAT', 1] 
a_str = [str(e) for e in a] 
a_str.sort() 
a_str 

['1', '4.6', '8.9999', '90', 'CAT', 'DOG', 'Hello']

+0

이고 정수 값 중 하나가 10 일 경우? – cdarke

+0

그것은 두 번째로 배치 될 것입니다. 이것은 사전 편집 순서입니다. OP는 그가 사용하고자하는 "규칙"을 지정하지 않습니다. –

+0

정확 하긴하지만 OP가 요구하는 규칙을 알지 못합니다. – cdarke

관련 문제