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

Python – 리스트를 원하는 크기로 겹치는 중첩 리스트로 변환하기

리스트를 지정한 간격과 크기에 따라 서로 겹치는(오버랩되는) 중첩 리스트로 변환해야 하는 경우가 있습니다. 이럴 때는 반복문과 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)

두 방법 모두 결과는 동일하므로, 상황에 따라 가독성이 좋은 방식을 선택해 사용하면 됩니다.