Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python – 문자열 목록을 숫자 부분을 기준으로 정렬하는 방법

파이썬에서 문자열로 이루어진 목록을 각 문자열에 포함된 숫자 부분을 기준으로 정렬해야 할 때가 있습니다. 이럴 때는 정규 표현식(regular expression)'findall' 메서드를 활용하면 간단하게 해결할 수 있습니다.

예제

아래는 문자열 목록을 숫자 부분으로 정렬하는 방법을 보여주는 예제입니다.

import re

def my_num_sort(my_str):
   return list(map(int, re.findall(r'\d+', my_str)))[0]

my_list = ["pyth42on", '14is', '32fun', '89to', 'lea78rn']
print("The list is :")
print(my_list)

my_list.sort(key=my_num_sort)

print("The result is :")
print(my_list)

출력 결과

The list is :
['pyth42on', '14is', '32fun', '89to', 'lea78rn']
The result is :
['14is', '32fun', 'pyth42on', 'lea78rn', '89to']

코드 설명

  • 필요한 패키지(정규 표현식 모듈인 re)를 환경에 임포트합니다.

  • 문자열을 매개변수로 받는 정렬용 함수 my_num_sort를 정의합니다.

  • findall 메서드를 사용하여 문자열에서 숫자 패턴(r'\d+')과 일치하는 부분을 모두 찾아냅니다.

  • map 메서드를 통해 찾은 숫자들을 정수형으로 변환한 뒤, 리스트로 변환합니다.

  • 리스트의 첫 번째 요소, 즉 문자열에서 발견된 첫 숫자를 함수의 반환값으로 돌려줍니다.

  • 함수 외부에서 문자열 목록을 정의하고 콘솔에 출력합니다.

  • sort 메서드의 key 인자에 앞서 정의한 함수를 지정하여, 목록을 숫자 값 기준으로 정렬합니다.

  • 정렬된 최종 결과를 콘솔에 출력합니다.

정리

이 방식의 핵심은 sort 메서드의 key 매개변수에 커스텀 함수를 전달하는 것입니다. 커스텀 함수가 각 문자열에서 숫자만 추출해 반환하면, 파이썬은 해당 숫자 값을 기준으로 목록을 오름차순으로 정렬합니다. 만약 내림차순 정렬이 필요하다면 sort(key=my_num_sort, reverse=True)처럼 reverse 옵션을 추가하면 됩니다.