HOWTO · Python
Python에서 문자열을 목록으로 변환
Python에서는 list(), split(), ast.literal_eval() 및 리스트 컴프리헨션을 사용하여 문자열을 목록으로 변환할 수 있습니다.
이 페이지의 내용
결과 목록의 각 항목이 무엇인지에 따라 방법을 선택합니다. 문자마다 한 항목이면 list(text), 단어나 구분자로 나뉜 값이면 text.split(), 이미 Python 리터럴을 나타내는 신뢰할 수 있는 텍스트면 ast.literal_eval(text), 항목마다 필터나 변환이 필요하면 리스트 컴프리헨션을 사용합니다. 완전히 제어하지 않는 입력에 eval()을 사용하지 마세요. 임의의 Python 코드를 실행할 수 있습니다.
list()로 문자열을 문자 목록으로 변환하기
list()는 문자열을 순회하므로 Unicode 문자마다 리스트 요소 하나를 만듭니다. 문장을 단어로 나누지 않습니다.
text = "Hello"
characters = list(text)
print(characters)
출력:
['H', 'e', 'l', 'l', 'o']
문자 단위 처리가 목적일 때 사용합니다. 빈 문자열은 []가 되고, 공백과 구두점도 구분자가 아니라 문자입니다.
split()으로 단어 또는 값 나누기
임의의 공백으로 구분된 단어에는 인수 없이 split()을 호출합니다. 연속 공백은 하나의 구분자로 취급되고 앞뒤 공백은 무시됩니다. 입력 형식이 구분자를 정의하면 명시적으로 전달합니다.
sentence = "Convert this string to a list"
words = sentence.split()
print(words)
출력:
['Convert', 'this', 'string', 'to', 'a', 'list']
쉼표로 구분된 데이터에는 split(",")을 쓰고, 쉼표 뒤 공백이 허용되면 각 필드에 strip()을 적용합니다.
text = "red, green, blue"
colors = [item.strip() for item in text.split(",")]
print(colors)
출력:
['red', 'green', 'blue']
명시적 구분자를 쓰면 빈 필드도 유지되고, 구분자가 없으면 전체 문자열이 한 항목이 됩니다. 따옴표 안 쉼표가 있는 CSV라면 split()을 확장하지 말고 Python의 csv 모듈을 사용하세요.
처음 몇 개의 구분자만 경계를 만들려면 maxsplit을 사용합니다. 예를 들어 maxsplit=1은 나머지를 두 번째 항목에 둡니다.
text = "red,green,blue"
first_two = text.split(",", maxsplit=1)
print(first_two)
출력:
['red', 'green,blue']
목록을 나타내는 텍스트 파싱하기
문자열이 "[1, 2, 3]"처럼 Python 리터럴 표현이면 ast.literal_eval()을 사용합니다. 임의의 식을 실행하지 않고 리터럴과 컨테이너를 받지만, 그래도 유효하고 신뢰할 수 있는 형식이 필요하며 잘못된 텍스트에서는 ValueError 또는 SyntaxError를 일으킬 수 있습니다.
import ast
text = "[1, 2, 3]"
values = ast.literal_eval(text)
if not isinstance(values, list):
raise TypeError("expected a list literal")
print(values)
출력:
[1, 2, 3]
파싱이 성공했다고 모두 리스트는 아닙니다. "(1, 2)" 같은 문자열은 튜플이 되므로 타입 검사가 유용합니다. JSON 텍스트에는 json.loads()를 쓰세요. Python 리터럴 구문과 JSON은 비슷하지만 동일하지 않습니다. 신뢰할 수 없는 입력에서 literal_eval()을 eval()로 바꾸지 마세요.
컴프리헨션으로 변환 또는 필터링하기
숫자만 남기거나 대소문자를 바꾸는 것처럼 변환에 규칙이 포함될 때 컴프리헨션을 사용합니다.
text = "P y 3"
digits = [char for char in text if char.isdigit()]
print(digits)
출력:
['3']
각 항목을 변환할 수도 있습니다. 예: [char.lower() for char in text if char.isalpha()]. 먼저 split()을 호출하지 않으면 문자를 대상으로 하므로, 단어를 정규화하려면 둘을 결합하세요.
적절한 방법 선택하기
문자에는 list(), 알려진 구분자에는 split(), 검증된 Python 리터럴 형식에는 ast.literal_eval(), 필터나 변환에는 컴프리헨션을 사용합니다. 파싱 전에 외부 입력을 검증하고, 원본이 CSV나 JSON이면 형식 전용 파서를 선택하세요. 이런 구분은 단어를 원했는데 문자 목록을 얻거나, 데이터여야 할 입력을 실행하는 흔한 실수를 막습니다.