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

Python – 중첩 리스트의 모든 시작 인덱스 찾기

중첩 리스트(nested list)에서 각 하위 리스트가 시작되는 인덱스를 구해야 하는 경우, 간단한 반복문과 append 메서드를 활용하면 손쉽게 해결할 수 있습니다.

이 방법은 각 하위 리스트의 길이를 누적하여 다음 하위 리스트가 시작되는 위치(인덱스)를 계산하는 원리로 동작합니다.

예제 코드

아래는 실제 동작을 보여주는 예제입니다.

my_list = [[51], [91, 22, 36, 44], [25, 25], [46, 67, 78, 82, 69, 29], [7, 5]]
print("리스트 출력 :")
print(my_list)

my_result = []
my_len = 0
for sub in my_list:

   my_result.append(my_len)
   my_len += len(sub)

print("각 시작 요소의 인덱스 :")
print(my_result)

실행 결과

리스트 출력 :
[[51], [91, 22, 36, 44], [25, 25], [46, 67, 78, 82, 69, 29], [7, 5]]
각 시작 요소의 인덱스 :
[0, 1, 5, 7, 13]

코드 설명

  • 리스트 안에 여러 개의 리스트가 포함된 중첩 리스트를 정의하고, 콘솔에 출력합니다.
  • 결과를 저장할 빈 리스트를 하나 만들고, 인덱스 계산용 변수를 0으로 초기화합니다.
  • 반복문으로 중첩 리스트를 순회하면서 현재까지 누적된 인덱스 값을 빈 리스트에 추가(append)합니다.
  • 순회할 때마다 해당 하위 리스트의 요소 개수만큼 인덱스 변수를 증가시켜, 다음 하위 리스트의 시작 위치를 계산합니다.
  • 모든 순회가 끝나면 채워진 결과 리스트가 곧 각 하위 리스트의 시작 인덱스 목록이 됩니다.
  • 최종 결과를 콘솔에 출력합니다.

대안 방법: itertools.accumulate 활용

파이썬 표준 라이브러리인 itertoolsaccumulate 함수를 사용하면 더 간결하게 표현할 수도 있습니다.

from itertools import accumulate

my_list = [[51], [91, 22, 36, 44], [25, 25], [46, 67, 78, 82, 69, 29], [7, 5]]

my_result = [0] + list(accumulate(len(sub) for sub in my_list[:-1]))
print(my_result)  # [0, 1, 5, 7, 13]

두 방법 모두 시간 복잡도는 O(N)(N은 전체 요소 수)으로 효율적이며, 상황에 맞게 선택하여 사용하면 됩니다.