리스트를 지정한 간격과 크기에 따라 서로 겹치는(오버랩되는) 중첩 리스트로 변환해야 하는 경우가 있습니다. 이럴 때는 반복문과 append 메서드를 함께 사용하면 간단하게 구현할 수 있습니다.
예제 코드
다음은 그 구현 과정을 보여주는 예제입니다.
my_list = [31, 25, 36, 76, 73, 89, 91, 100]
print("The list is :")
print(my_list)
my_step, my_size = 3, 4
my_result = []
for index in range(0, len(my_list), my_step):
my_result.append(my_list[index: index + my_size])
print("The result is :")
print(my_result)
실행 결과
The list is : [31, 25, 36, 76, 73, 89, 91, 100] The result is : [[31, 25, 36, 76], [76, 73, 89, 91], [91, 100]]
코드 설명
먼저 하나의 리스트를 정의하고, 콘솔에 출력하여 확인합니다.
두 개의 정수를 정의합니다.
my_step은 다음 부분 리스트의 시작 인덱스가 이동하는 간격이고,my_size는 잘라낼 부분 리스트의 최대 길이입니다.변환 결과를 담아둘 빈 리스트를 생성합니다.
range()함수를 사용해 원본 리스트를my_step간격으로 순회하면서, 각 인덱스부터my_size길이만큼 슬라이싱한 부분 리스트를 결과 리스트에 추가(append)합니다.슬라이싱 범위가 리스트의 끝을 넘어가더라도 파이썬은 오류 없이 남은 요소까지만 반환하므로, 마지막 부분 리스트는 길이가 짧아질 수 있습니다. 위 예제에서도 마지막 요소인
[91, 100]이 그렇습니다.최종적으로 만들어진 중첩 리스트가 콘솔에 출력됩니다.
리스트 컴프리헨션으로 간결하게 작성하기
동일한 로직은 리스트 컴프리헨션(list comprehension)을 활용하면 한 줄로 더 간결하게 표현할 수 있습니다.
my_result = [my_list[index: index + my_size] for index in range(0, len(my_list), my_step)] print(my_result)
두 방법 모두 결과는 동일하므로, 상황에 따라 가독성이 좋은 방식을 선택해 사용하면 됩니다.