문자열 리스트를 하나의 연속된 문자열처럼 생각할 때, K번째 문자가 속한 단어 내에서 몇 번째 위치에 있는지 확인해야 하는 경우가 있습니다. 이럴 때 파이썬에서는 리스트 컴프리헨션(list comprehension)과 enumerate() 함수를 조합하면 매우 간결하게 해결할 수 있습니다.
예제 코드
다음은 위 방법을 구현한 전체 코드입니다.
my_list = ["python", "is", "fun", "to", "learn"]
print("The list is :")
print(my_list)
K = 15
print("The value of K is :")
print(K)
my_result = [element[0] for sub in enumerate(my_list) for element in enumerate(sub[1])]
my_result = my_result[K]
print("The result is :")
print(my_result)
실행 결과
The list is :
['python', 'is', 'fun', 'to', 'learn']
The value of K is :
15
The result is :
2
코드 설명
문자열로 구성된 리스트를 정의한 뒤 콘솔에 출력합니다.
찾고자 하는 위치 값 'K'를 정의하고 함께 출력합니다.
리스트 컴프리헨션 안에서 외부 반복문은 enumerate()로 리스트의 각 단어를, 내부 반복문은 각 단어를 구성하는 개별 문자를 순회합니다.
내부 enumerate()가 반환하는 튜플의 첫 번째 요소, 즉 각 문자의 인덱스만 추출합니다.
그 결과 모든 문자의 단어 내 위치가 순서대로 담긴 하나의 리스트가 만들어집니다.
enumerate()를 사용했기 때문에 결과 리스트에는 문자열이 아닌 정수(인덱스)가 저장됩니다.
마지막으로 이 리스트에서 'K'번째 요소를 꺼내 콘솔에 출력합니다.
동작 원리 살펴보기
위 예제에서 리스트 컴프리헨션이 생성하는 중간 결과는 다음과 같습니다.
[0, 1, 2, 3, 4, 5, 0, 1, 0, 1, 2, 0, 1, 0, 1, 2, 3, 4]
"python"(6글자)은 0~5, "is"(2글자)는 0~1, "fun"(3글자)은 0~2, "to"(2글자)는 0~1, "learn"(5글자)은 0~4 순서로 이어집니다. 따라서 K=15일 때 결과는 2이며, 이는 전체 문자를 이어 붙였을 때 16번째 문자('a')가 단어 "learn" 내에서 인덱스 2, 즉 세 번째 위치에 있음을 의미합니다.