ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Natsort를 이용한 숫자 리스트 정렬
    Natsort 2021. 12. 6. 15:08

     

     

    숫자가 포함된 list를 정렬하다보면 sorted() 함수를 이용할 때가 자주 있습니다.

     

    매우 유용한 함수지만, zfill() 함수를 이용하여 자릿수를 맞추지 않은 경우엔

     

    아래처럼 매우 불편한 상황이 나오기도 합니다.

     

    N = 20
    paths = [f"path_{i}" for i in range(N+1)]
    sorted_paths = sorted(paths)
    print(sorted_paths)
    
    ####
    ['path_0',
     'path_1',
     'path_10',
     'path_11',
     'path_12',
     'path_13',
     'path_14',
     'path_15',
     'path_16',
     'path_17',
     'path_18',
     'path_19',
     'path_2',
     'path_20',
     'path_3',
     'path_4',
     'path_5',
     'path_6',
     'path_7',
     'path_8',
     'path_9']
     
     
    "-----------------------------------"
     
    N = 20
    paths = [f"path_{str(i).zfill(2)}" for i in range(N+1)]
    sorted_paths = sorted(paths)
    print(sorted_paths)
    
    ####
    ['path_00',
     'path_01',
     'path_02',
     'path_03',
     'path_04',
     'path_05',
     'path_06',
     'path_07',
     'path_08',
     'path_09',
     'path_10',
     'path_11',
     'path_12',
     'path_13',
     'path_14',
     'path_15',
     'path_16',
     'path_17',
     'path_18',
     'path_19',
     'path_20']

     

    애초에 순서가 정렬되어 있는 상태에서는 굳이 sorted()를 사용할 필요가 없지만,

    때에 따라서 다시 정렬해야 할 때가 있습니다.

    그럴 때는 natsort 모듈을 이용하면 좀 편리합니다.

     

    natsort를 사용하여 numpy, pandas series 등을 정렬하게 되면 

    data type은 list로 변경되어 반환됩니다.

     

    natsort 모듈을 설치하려면 pip를 이용해서 설치해주시면 됩니다.

    pip install natsort
    
    or
    
    """
    주피터 환경에서 실행할 때
    """
    !pip install natsort

     

    사용 방법은 다음과 같습니다.

    import natsort
    
    N = 20
    path_range = [f"path_{i}" for i in range(N+1)]
    sorted_path_range = natsort.natsorted(path_range)
    print(sorted_path_range)
    
    ####
    ['path_0',
     'path_1',
     'path_2',
     'path_3',
     'path_4',
     'path_5',
     'path_6',
     'path_7',
     'path_8',
     'path_9',
     'path_10',
     'path_11',
     'path_12',
     'path_13',
     'path_14',
     'path_15',
     'path_16',
     'path_17',
     'path_18',
     'path_19',
     'path_20']

    댓글

Designed by Tistory.