인프런 커뮤니티 질문&답변

국지훈님의 프로필 이미지

작성한 질문수

우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)

시퀀스(2-2)

sorted함수 출력 질문

작성

·

265

0

f_list = ['orange''apple''mango''papaya''lemon''strawberry''coconut']
print('sorted -'sorted(f_list, key=lambda x: x[-1]))
print('sorted -'sorted(f_list, key=lambda x: x[-1], reverse=True))
출력
sorted - ['papaya', 'orange', 'apple', 'lemon', 'mango', 'coconut', 'strawberry']
sorted - ['strawberry', 'coconut', 'mango', 'lemon', 'orange', 'apple', 'papaya']

말씀대로라면 reverse=True를 통해 위에 결과가 반대로 출력되야 할텐데

윗줄 처음 3개의 항목과 아랫줄 마지막 3개의 항목을 비교하면

완전히 순서가 바뀌어서 출력되지 않았습니다. 왜 그런걸까요..?

그리고 lambda x: x[-1]에서 x라는 인자에 대한 선언 필요 없이 아무렇게 쓰면 되는 건가요? 

답변 3

3

1년이나 지났지만, 수강생이 답드립니다.

x[-1]에 대해서 reverse로 정렬되고, x[-1]이 같다면 x[-2]로 오름차순 정리됩니다. 

원하시는 대로 처리하기 위해선 key = lambda x : (x[-1], x[-2]), reverse = True)로 하시면 x[-2]에 대해서도 내림차순이 적용됩니다.

0

국지훈님의 프로필 이미지
국지훈
질문자

끝 알파벳을 기준으로 정렬했을 때 출력 첫 번째 줄은 이해가 됩니다.

근데 reverse=True를 추가하면 반대로 출력되어야 할텐데 그렇지 않을 거 같아서 질문 드립니다.

다시 말해,  'papaya', 'orange', 'apple', ... 를 reverse하면 ... , 'apple', 'orange', 'papaya'가 돼야할텐데

출력에는 ... , 'orange', 'apple', 'papaya'로 나왔습니다.

b_list = ['aa','ba','ca','da','ea']
print(sorted(b_list, key=lambda x : x[-1]))
print(sorted(b_list, key=lambda x : x[-1], reverse=True))
출력
['aa', 'ba', 'ca', 'da', 'ea']
['aa', 'ba', 'ca', 'da', 'ea']

이렇게 reverse=True를 넣어도 출력이 동일하게 나옵니다. 제가 이해를 잘 못하는 걸까요..ㅎㅎ

0

좋은사람님의 프로필 이미지
좋은사람
지식공유자

lambda x: x[-1]은 각 단어의 끝 알파벳 기준으로 정렬이 된 것입니다.

지금 출력결과도 확인해 보시면 제대로 나온 것 같습니다.