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

Python – 문자열에 포함된 숫자를 기준으로 리스트 정렬하기

문자열 목록을 각 문자열에 포함된 숫자 부분을 기준으로 정렬해야 하는 경우가 있습니다. 이럴 때는 정규표현식(regular expression)map, list 메서드를 활용한 사용자 정의 함수를 만들어 해결할 수 있습니다.

예제 코드

아래는 실제 동작을 보여주는 예제입니다.

import re
print("The regular expression package has been imported successfully.")

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

my_list = ["pyt23hon", "fu30n", "lea14rn", 'co00l', 'ob8uje3345t']

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

my_list.sort(key=my_digit_sort)
print("The list has been sorted based on the pre-defined method..")

print("The resultant list is : ")
print(my_list)

실행 결과

The regular expression package has been imported successfully.
The list is :
['pyt23hon', 'fu30n', 'lea14rn', 'co00l', 'ob8uje3345t']
The list has been sorted based on the pre-defined method..
The resultant list is :
['co00l', 'ob8uje3345t', 'lea14rn', 'pyt23hon', 'fu30n']

코드 설명

  • 먼저 필요한 패키지(re)를 환경에 임포트합니다.

  • my_digit_sort라는 이름의 메서드를 정의하며, 이 메서드는 문자열을 매개변수로 받습니다.

  • re 패키지의 findall 메서드와 정규표현식 r'\d+'를 사용하여 단어 안에 포함된 모든 숫자를 찾아냅니다.

  • map 함수를 통해 추출된 숫자들을 정수형으로 변환하고, 첫 번째 요소를 반환하여 정렬 기준 키로 사용합니다.

  • 메서드 외부에서는 정수가 포함된 문자열 리스트를 정의하고 콘솔에 출력합니다.

  • sort 메서드의 key 인자에 앞서 정의한 메서드를 전달하여 리스트를 정렬합니다.

  • 최종적으로 정렬된 결과 리스트가 콘솔에 출력됩니다.

핵심 포인트

이 방식의 핵심은 re.findall(r'\d+', 문자열)이 문자열 내 연속된 숫자들을 문자열 형태의 리스트로 반환한다는 점입니다. 이 값을 map(int, ...)으로 감싸면 정수로 변환되므로, 숫자 크기를 비교 기준으로 삼아 자연스러운 숫자 순 정렬(natural sort)이 가능해집니다. 파일명이나 로그 데이터처럼 문자와 숫자가 섞여 있는 데이터를 정렬할 때 특히 유용한 기법입니다.