리스트의 각 요소 위치(인덱스)에 해당하는 개수만큼 값을 반복하여 중첩 리스트(nested list)를 만들어야 하는 경우, 간단한 반복문과 리스트 컴프리헨션(list comprehension)을 활용하면 손쉽게 해결할 수 있습니다.
예를 들어 길이가 4인 리스트가 있다면, 첫 번째 항목은 1이 한 번, 두 번째 항목은 2가 두 번, 세 번째 항목은 3이 세 번 반복되는 형태의 중첩 리스트를 생성할 수 있습니다.
예제 코드
아래는 실제 동작을 보여주는 예제입니다.
my_list = [11, 25, 36, 24]
print("The list is :")
print(my_list)
for element in range(len(my_list)):
my_list[element] = [element+1 for j in range(element+1)]
print("The resultant list is :")
print(my_list)실행 결과
The list is : [11, 25, 36, 24] The resultant list is : [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]
코드 설명
먼저 정수 값으로 이루어진 리스트를 정의하고, 콘솔에 출력합니다.
len() 함수로 리스트의 길이를 구한 뒤, range()를 통해 각 인덱스를 하나씩 순회합니다.
각 인덱스마다 리스트 컴프리헨션을 사용하여 '인덱스 + 1' 값을 '인덱스 + 1'번 반복하는 새로운 하위 리스트를 생성합니다.
생성된 하위 리스트로 원본 리스트의 해당 위치 값을 덮어쓰고, 최종 결과 리스트를 콘솔에 출력합니다.
참고: enumerate를 활용한 대안
인덱스를 직접 다루지 않고 enumerate() 함수를 사용하면 코드를 더욱 파이썬답게 작성할 수 있습니다.
my_list = [11, 25, 36, 24] result = [[i] * i for i, _ in enumerate(my_list, start=1)] print(result)
이 방식은 원본 리스트의 값을 변경하지 않고 새로운 중첩 리스트를 반환하므로, 원본 데이터를 보존해야 하는 경우에 유용합니다.