• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

sorted함수 출력 질문

20.08.20 17:35 작성 조회수 169

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

이시현님의 프로필

이시현

2021.06.30

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

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

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

0

국지훈님의 프로필

국지훈

질문자

2020.08.21

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

근데 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]은 각 단어의 끝 알파벳 기준으로 정렬이 된 것입니다.

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