Python으로 데이터를 다루다 보면 리스트 안에 숫자가 문자열 형태로 들어 있는 경우를 자주 만나게 됩니다. 이런 데이터로 계산을 수행하려면 먼저 문자열을 숫자로 변환해야 합니다. 이 글에서는 리스트 내부의 문자열을 숫자로 바꾸는 다양한 방법을 소개합니다.
int() 함수 사용하기
int() 함수는 리스트의 문자열 요소에 적용하여 정수로 변환할 수 있습니다. 요소 하나 안에 여러 개의 문자열이 포함되어 있더라도 모든 값을 처리하려면, 각 요소를 빠짐없이 순회하도록 for 루프를 신중하게 설계해야 합니다.
예제
listA = [['29','12'], ['25'], ['70']]
# 주어진 리스트
print("Given list A: ", listA)
# int 사용
res = [[int(n) for n in element] for i in listA for element in i]
# 결과 출력
print("The numeric lists: ", res)
출력
위 코드를 실행하면 다음과 같은 결과가 나옵니다.
Given list A: [['29', '12'], ['25'], ['70']]
The numeric lists: [[2, 9], [1, 2], [2, 5], [7, 0]]
위 예제의 중첩 리스트 컴프리헨션은 각 문자열을 한 글자씩 순회하면서 int()로 변환합니다. 따라서 '29'가 [2, 9]처럼 자릿수별 정수 리스트로 분해되어 출력됩니다.
map() 함수 사용하기
map() 함수를 활용하는 방법도 있습니다. map()은 지정된 함수를 전달받은 각 인자에 반복적으로 적용하는 역할을 하며, 내부 리스트에서 요소를 하나씩 꺼내오는 for 루프와 함께 사용됩니다. 다만 이 방식은 내부 리스트에 여러 개의 요소가 들어 있는 경우에는 동작하지 않는다는 점에 유의해야 합니다.
예제
listA = [['29'], ['25'], ['70']]
# 주어진 리스트
print("Given list A: ", listA)
# map 사용
res = [list(map(int, list(elem[0]))) for elem in listA if elem]
# 결과 출력
print("The numeric lists: ", res)
출력
위 코드를 실행하면 다음과 같은 결과가 나옵니다.
Given list A: [['29'], ['25'], ['70']]
The numeric lists: [[2, 9], [2, 5], [7, 0]]
참고: 문자열 전체를 하나의 정수로 변환하기
'29'를 29처럼 문자열 전체를 하나의 정수 값으로 변환하고 싶다면, 아래와 같이 더 간단한 리스트 컴프리헨션을 사용하는 것이 좋습니다.
listA = [['29', '12'], ['25'], ['70']]
res = [[int(x) for x in elem] for elem in listA]
print(res)
실행 결과:
[[29, 12], [25], [70]]
이처럼 데이터의 구조와 목적에 맞는 방법을 선택하면, 중첩된 리스트 안에 있는 숫자 문자열도 손쉽게 정수로 변환하여 계산에 활용할 수 있습니다.