파이썬으로 데이터를 다루다 보면 요소가 문자와 숫자가 일정한 패턴으로 섞여 있는 리스트를 만나게 됩니다. 이런 경우 문자열에서 숫자 부분만 분리해 내면 이후 계산 작업에 활용할 수 있습니다. 이 글에서는 파이썬 문자열 리스트에서 숫자를 추출하는 대표적인 두 가지 방법을 소개합니다.
split() 함수 활용하기
split() 함수는 지정한 구분자를 기준으로 문자열을 나누는 기능을 합니다. 아래 예제의 리스트 요소들은 문자와 숫자 사이에 하이픈(-)이 구분자로 들어 있으므로, split()으로 문자열을 나눈 뒤 두 번째 부분(인덱스 1)을 가져오면 숫자만 얻을 수 있습니다.
예제 코드
listA = ['Mon-2', 'Wed-8', 'Thu-2', 'Fri-7']
# 주어진 리스트
print("Given list : " + str(listA))
# 숫자 추출
num_list = [int(i.split('-')[1]) for i in listA]
# 결과 출력
print("List only with numbers : ", num_list)실행 결과
Given list : ['Mon-2', 'Wed-8', 'Thu-2', 'Fri-7'] List only with numbers : [2, 8, 2, 7]
map()과 isnumeric() 활용하기
두 번째 방법은 각 요소를 하나씩 살펴보며 숫자에 해당하는 문자만 골라내는 방식입니다. isnumeric() 메서드로 문자가 숫자인지 판별하고, map() 함수를 사용해 모든 요소에 동일한 처리를 반복 적용합니다. 이 방식은 하이픈 같은 특정 구분자에 의존하지 않기 때문에 더 유연하게 활용할 수 있다는 장점이 있습니다.
예제 코드
listA = ['Mon-2', 'Wed-8', 'Thu-2', 'Fri-7']
# 주어진 리스트
print("Given list : " + str(listA))
# 숫자 추출
num_list = list(map(lambda sub: int(''.join(
[i for i in sub if i.isnumeric()])), listA))
# 결과 출력
print("List only with numbers : ", num_list)실행 결과
Given list : ['Mon-2', 'Wed-8', 'Thu-2', 'Fri-7'] List only with numbers : [2, 8, 2, 7]
정리
구분자가 명확히 정해져 있다면 split() 방식이 코드가 간결하고 직관적입니다. 반면 구분자 없이 문자와 숫자가 섞여 있는 경우에는 isnumeric()으로 숫자만 필터링하는 방식이 더 안정적으로 동작합니다. 상황에 맞는 방법을 선택해 사용하시기 바랍니다.