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

파이썬에서 문자열 형태의 리스트를 실제 리스트 객체로 변환하는 3가지 방법

데이터를 다루다 보면 문자열로 전달되지만 그 내부 구조는 파이썬 리스트와 동일한 경우가 종종 있습니다. 예를 들어 파일이나 API 응답에서 받은 데이터가 "['Mon', 2, 'Tue', 4]"처럼 리스트 모양의 문자열일 수 있는데, 이대로는 인덱싱이나 반복문 등 리스트 연산을 사용할 수 없습니다. 이 글에서는 문자열로 묶인 리스트를 실제 파이썬 리스트 객체로 변환하는 대표적인 세 가지 방법을 소개합니다.

1. eval() 함수 사용하기

eval() 함수는 문자열로 전달된 파이썬 표현식을 그대로 평가하여 실제 결과를 반환합니다. 따라서 리스트 형태의 문자열을 eval()에 넘기면 곧바로 파이썬 리스트를 얻을 수 있습니다.

예제 코드

stringA = "['Mon', 2,'Tue', 4, 'Wed',3]"

# 입력 문자열 확인
print("Given string : \n", stringA)
print(type(stringA))

# eval을 사용한 변환
res = eval(stringA)

# 변환 결과 및 타입 확인
print("The converted list : \n", res)
print(type(res))

실행 결과

Given string :
['Mon', 2,'Tue', 4, 'Wed',3]
<class 'str'>
The converted list :
['Mon', 2, 'Tue', 4, 'Wed', 3]
<class 'list'>

문자열(str) 타입이었던 값이 리스트(list) 타입으로 성공적으로 변환되었습니다.

주의: eval()은 전달된 코드를 그대로 실행하므로, 신뢰할 수 없는 외부 입력에 사용하면 심각한 보안 취약점이 발생할 수 있습니다. 외부 데이터에는 아래의 ast.literal_eval() 사용을 권장합니다.

2. ast.literal_eval() 함수 사용하기

ast 모듈의 literal_eval() 함수는 문자열을 안전하게 평가해 줍니다. 내부적으로 파이썬 리터럴(리스트, 딕셔너리, 숫자, 문자열 등)만 허용하고 임의의 코드 실행은 차단하기 때문에, eval()보다 훨씬 안전한 대안입니다.

예제 코드

import ast

stringA = "['Mon', 2,'Tue', 4, 'Wed',3]"

# 입력 문자열 확인
print("Given string : \n", stringA)
print(type(stringA))

# literal_eval을 사용한 변환
res = ast.literal_eval(stringA)

# 변환 결과 및 타입 확인
print("The converted list : \n", res)
print(type(res))

실행 결과

Given string :
['Mon', 2,'Tue', 4, 'Wed',3]
<class 'str'>
The converted list :
['Mon', 2, 'Tue', 4, 'Wed', 3]
<class 'list'>

eval()과 동일한 결과를 얻으면서도 코드 실행 위험 없이 안전하게 변환할 수 있습니다.

3. json.loads() 함수 사용하기

json 모듈의 loads() 함수는 JSON 형식의 문자열을 파이썬 객체로 역직렬화(deserialize)합니다. 리스트 형태의 문자열을 전달하면 실제 파이썬 리스트로 변환됩니다.

예제 코드

import json

stringA = '["Mon", 2,"Tue", 4, "Wed",3]'

# 입력 문자열 확인
print("Given string : \n", stringA)
print(type(stringA))

# loads를 사용한 변환
res = json.loads(stringA)

# 변환 결과 및 타입 확인
print("The converted list : \n", res)
print(type(res))

실행 결과

Given string :
["Mon", 2,"Tue", 4, "Wed",3]
<class 'str'>
The converted list :
['Mon', 2, 'Tue', 4, 'Wed', 3]
<class 'list'>

JSON 표준에서는 문자열 값을 반드시 큰따옴표(")로 감싸야 한다는 점에 유의하세요. 작은따옴표를 사용하면 json.decoder.JSONDecodeError가 발생합니다.

정리 및 방법 비교

방법특징권장 상황
eval()임의의 파이썬 표현식 실행 가능, 속도 빠름완전히 신뢰할 수 있는 내부 데이터만 사용 시
ast.literal_eval()리터럴만 평가, 코드 실행 불가, 안전함외부 입력 처리 시 가장 권장
json.loads()JSON 규격 준수 필요(큰따옴표 필수)API 응답 등 JSON 기반 데이터 처리 시

세 가지 방법 모두 문자열 형태의 리스트를 실제 파이썬 리스트로 변환할 수 있습니다. 일반적으로는 안전성이 검증된 ast.literal_eval()을 우선적으로 사용하고, 데이터가 명확히 JSON 형식이라면 json.loads()를 선택하는 것이 좋습니다.