-
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']