HOWTO · Python

Python에서 문자열 목록을 정수로 변환

이 튜토리얼은 파이썬에서 문자열 목록을 정수로 변환하는 방법을 보여줍니다.

이 페이지의 내용

숫자로 된 문자열에 int()를 적용하면 정수 목록을 만들 수 있습니다. 간결한 기본 선택지는 리스트 컴프리헨션이며, map()와 for 루프도 유용한 대안입니다. 배열을 다룰 때는 프로젝트에서 이미 해당 라이브러리를 사용한다면 NumPy로 값을 변환할 수 있습니다. 아래 예제는 일관된 입력 데이터를 사용합니다. 제공된 실행 결과에서는 변환 결과가 [12, 7, 50, 92]로 나타납니다.

문자열 목록을 정수로 변환하기

각 문자열은 int()가 받아들이는 정수 표현이어야 합니다. 예를 들면 "12"나 "-4"입니다. 변환하면 정숫값이 만들어지므로 문자열을 반복해서 파싱하지 않고 산술 연산에 사용할 수 있습니다. 단순한 변환에는 리스트 컴프리헨션을, 반복 가능한 객체의 각 항목에 함수를 적용하려면 map()를, 항목마다 추가 처리가 필요하면 루프를 선택하세요.

리스트 컴프리헨션 사용하기

리스트 컴프리헨션은 변환과 결과 수집을 읽기 쉬운 하나의 표현식으로 나타냅니다. 다음 예제를 실행해 보세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

values = ["12", "7", "50", "92"]
integers = [int(value) for value in values]
print(integers)
[12, 7, 50, 92]

새 목록이 만들어지며 values는 변경되지 않습니다. list comprehension은 메서드가 아니라 Python 언어의 구문입니다. 모든 입력을 변환해야 하고 변환 과정이 단순할 때 좋은 기본 선택입니다.

map() 사용하기

map()는 각 항목에 int()를 적용합니다. Python 3에서는 반복자를 반환하므로 결과를 목록으로 사용하거나 목록 형태로 출력하려면 list()로 감싸세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

values = ["12", "7", "50", "92"]
integers = list(map(int, values))
print(integers)
[12, 7, 50, 92]

앞의 예제와 변환 동작은 같습니다. 반복자는 값을 하나씩 처리할 때 유용하지만, 순회하면 소진됩니다. 다시 사용할 목록이 필요하면 목록으로 만들어 두세요. 일반적인 변환에는 함수와 리스트 컴프리헨션 모두 명확한 선택지입니다.

for 루프 사용하기

루프를 사용하면 각 단계가 분명하게 드러납니다. 변환에 항목별 처리가 필요할 때, 예를 들어 어떤 원본 값에서 오류가 났는지 기록할 때 편리합니다. 변환한 값을 결과 목록에 추가하세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

values = ["12", "7", "50", "92"]
integers = []
for value in values:
    integers.append(int(value))
print(integers)
[12, 7, 50, 92]

한 줄짜리 리스트 컴프리헨션으로는 중요한 처리 과정이 잘 드러나지 않을 때 이 방식을 사용하세요. 단순 변환만 필요하다면 리스트 컴프리헨션이 더 짧습니다.

NumPy로 문자열 변환하기

프로젝트에서 이미 NumPy를 사용하고 있고 수치 연산을 위한 배열이 필요하다면, 정수 dtype을 지정해 문자열을 변환하세요. 이 완전한 예제는 NumPy를 가져오고 입력을 정의한 다음 결과 배열을 출력합니다. 실행 환경에 NumPy가 설치되어 있어야 합니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

try:
    import numpy as np
except ImportError:
    print("Install NumPy to run this example.")
else:
    values = ["12", "7", "50", "92"]
    integers = np.array(values, dtype=int)
    print(integers)

결과는 Python 목록이 아니라 NumPy 정수 배열입니다. 주변 작업에서 NumPy 배열 연산이 필요할 때 이 방법을 사용하세요. 성능과 메모리 사용량은 데이터 크기와 작업 부하에 따라 달라지므로 속도를 비교하려면 직접 측정해야 합니다.

변환할 수 없는 값 처리하기

"seven"과 같은 문자열은 정수 표현이 아니므로 int()는 ValueError를 발생시킵니다. 입력에 이런 값이 있을 수 있다면 변환할 때마다 예외를 잡고 해당 값을 건너뛸지, 알릴지, 처리를 중단할지 결정하세요. 다음 예제는 유효한 정수를 모으고 거부된 문자열을 기록합니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

values = ["12", "seven", "50"]
integers = []
rejected = []
for value in values:
    try:
        integers.append(int(value))
    except ValueError:
        rejected.append(value)
print(integers)
print(rejected)
[12, 50]
['seven']

예상하는 변환 오류만 처리하세요. ValueError만 잡으면 관련 없는 프로그래밍 오류가 드러납니다. 모든 값이 유효해야 한다면 예외를 그대로 전파해 잘못된 입력을 알리는 편이 나을 수 있습니다. 애플리케이션에 가장 적합한 지점에서 거부된 값을 검증하거나 보고하세요.

소수 문자열과 혼합된 값 변환하기

int()는 정수 형식의 문자열을 받지만 "3.8"과 같은 소수 표기 문자열은 받지 않습니다. 소수 부분을 버리는 것이 의도한 규칙이라면 float()로 변환한 다음 int()를 적용하세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

values = ["3.8", "-2.4"]
integers = [int(float(value)) for value in values]
print(integers)
[3, -2]

int로 변환하면 가장 가까운 정수로 반올림하는 것이 아니라 0을 향해 소수 부분을 버립니다. 반올림이 필요하다면 별도의 반올림 규칙을 정해 적용하세요. 매우 큰 소수 문자열을 부동소수점으로 변환할 때 생길 수 있는 정밀도 한계도 고려해야 합니다.

정수와 숫자 문자열이 이미 섞여 있는 목록에서는 문자열인 값만 변환하세요.

values = [12, "7", 50]
integers = [int(value) if isinstance(value, str) else value for value in values]
print(integers)
[12, 7, 50]

이렇게 하면 기존 정수는 정수로 유지되고 문자열은 파싱됩니다. 이 검사가 임의의 객체나 잘못된 문자열까지 안전하게 처리해 주는 것은 아닙니다. 실제 입력을 검증하고 신뢰할 수 없는 값이 들어올 수 있다면 ValueError를 처리하세요. 목록의 모든 항목이 이미 정수라면 변환할 필요가 없습니다.