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

파이썬으로 문자열 리스트에서 K번째 문자의 위치 찾기

문자열 리스트를 하나의 연속된 문자열처럼 생각할 때, 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, 즉 세 번째 위치에 있음을 의미합니다.