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

파이썬에서 문자열 리스트를 리스트의 리스트로 변환하는 방법

이 글에서는 문자열 데이터 타입으로 구성된 리스트를 실제 '리스트의 리스트(list of lists)' 형태로 변환하는 방법을 알아봅니다. 여기서 다루는 입력 데이터는 각 요소가 리스트처럼 생긴 문자열이며, 이를 파이썬이 실제로 다룰 수 있는 중첩 리스트 구조로 바꾸는 것이 목표입니다.

예를 들어 '[0, 1, 2, 3]'이라는 문자열 하나가 리스트의 요소로 들어 있는 경우, 이를 ['0', '1', '2', '3']과 같은 실제 리스트로 분리해야 할 때가 있습니다. 대표적인 해결 방법은 크게 두 가지입니다.

방법 1: strip()과 split() 조합하기

가장 직관적인 방식은 strip() 메서드로 양 끝의 대괄호 []를 제거한 뒤, split()으로 쉼표를 기준으로 문자열을 나누는 것입니다. 이렇게 하면 각 문자열이 개별 요소로 분리된 리스트가 만들어집니다.

예제 코드

list1 = [ '[0, 1, 2, 3]','["Mon", "Tue", "Wed", "Thu"]' ]
print ("The given list is : \n" + str(list1))
print("\n")
# strip() + split() 사용
result = [k.strip("[]").split(", ") for k in list1]
print ("Converting list of string to list of list : \n" + str(result))

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

The given list is :
['[0, 1, 2, 3]', '["Mon", "Tue", "Wed", "Thu"]']
Converting list of string to list of list :
[['0', '1', '2', '3'], ['"Mon"', '"Tue"', '"Wed"', '"Thu"']]

출력을 보면 원래 문자열이었던 각 항목이 숫자 문자열과 요일 문자열로 이루어진 별도의 리스트로 성공적으로 분리된 것을 확인할 수 있습니다.

방법 2: split()과 슬라이싱 활용하기

strip() 없이 split()과 문자열 슬라이싱만으로도 동일한 결과를 얻을 수 있습니다. 슬라이싱 [1:-1]을 사용하면 문자열의 첫 번째 문자(여는 대괄호)와 마지막 문자(닫는 대괄호)를 잘라낼 수 있고, 이후 split()으로 나머지 부분을 분리합니다.

예제 코드

list1 = [ '[0, 1, 2, 3]','["Mon", "Tue", "Wed", "Thu"]' ]
print ("The given list is : \n" + str(list1))
print("\n")
# split() 사용
result = [i[1 : -1].split(', ') for i in list1]
print ("Converting list of string to list of list : \n" + str(result))

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

The given list is :
['[0, 1, 2, 3]', '["Mon", "Tue", "Wed", "Thu"]']
Converting list of string to list of list :
[['0', '1', '2', '3'], ['"Mon"', '"Tue"', '"Wed"', '"Thu"']]

마무리

두 방법 모두 동일한 결과를 내지만 상황에 따라 선택 기준이 달라질 수 있습니다.

  • strip() + split(): 의도가 명확하고 가독성이 좋아 일반적으로 권장됩니다.
  • split() + 슬라이싱: 추가 메서드 호출 없이 한 번에 처리할 수 있어 간결하지만, 슬라이싱 범위에 익숙하지 않다면 코드 이해가 다소 어려울 수 있습니다.

참고로, 입력 문자열이 항상 올바른 리스트 형식임이 보장된다면 ast.literal_eval()을 사용하는 것도 안전한 대안이 될 수 있습니다. 이 함수는 문자열을 실제 파이썬 객체(정수, 리스트 등)로 변환해 주므로, 요소까지 숫자 타입으로 변환하고 싶을 때 유용합니다.