ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • List 정렬 기준, iterable객체의 요소가 iterable 일 때
    Today_I_Learned/Python 2023. 11. 1. 16:17

    작성 의도

    반복 가능한(iterable) 객체의 모든 Element 역시 반복 가능한 객체 일 때 (ex. 2차원 List, [(1, 2, 3), (4, 5, 6), …] 등) sort()나 sorted() 함수를 이용하여 정렬을 진행하면 python에서는 기본적으로 각 Element의 첫 번째 요소를 기준으로 오름차순 정렬을 수행한다.

    그러나 각 Element의 첫 번째가 아닌, 특정 순서의 값으로 정렬을 진행하고 싶은 경우엔 sorted() 나 List의 내장 함수인 sort() 함수의 key parameter를 잘 활용해야 한다. (* key parameter는 함수(callable)를 인자로 받는다.)

     

    다음 글을 읽으면 key parameter를 통해 함수를 여러 번 호출하지 않고도 복잡한 정렬을 한 번에 수행하는 방법에 대해 학습하게 된다.

     

    1. 각 Element의 (첫 번째가 아닌) 특정 순서의 값으로 정렬을 하고 싶을 때

    ex) tmp = [("table", 1), ("airplane", 2), ("tree", 2), ("bag", 2), ("car", 3)] 을 각 Element의 2번째 값(1, 5, 2, 4, 3)들을 기준으로 오름차순 정렬하고 싶은 경우.

    방법: tmp.sort(key=lambda x: x[1])

    결과: [('table', 1), ('airplane', 2), ('tree', 2), ('bag', 2), ('car', 3)]

     

     

    2. 정렬 기준을 2개 이상 사용하고 싶을 때

    ex) tmp = [("table", 1), ("airplane", 2), ("tree", 2), ("bag", 2), ("car", 3)] 을 각 Element의 2번째 값(1, 5, 2, 4, 3)들을 기준으로 정렬한 다음 1번 째 값으로도 정렬을 하고 싶을 때.

    방법: tmp.sort(key=lambda x: (x[1], x[2]))

    결과: [('table', 1), ('airplane', 2), ('bag', 2), ('tree', 2), ('car', 3)]

    ⇒ 1번 경우의 결과와 달리 ('bag', 2)과 ('tree', 2)의 순서가 바뀐 것을 확인할 수 있다. (2번째 값인 각각의 정수들로 정렬 후 1번째 값인 문자열로 정렬을 또 한 번 수행했기 때문에)

    댓글

Designed by Tistory.