파이썬에서 일반적인 리스트는 요소가 차례대로 나열된 1차원(1D) 구조입니다. 반면 2차원(2D) 리스트는 외부 리스트 안에 리스트가 중첩되어 있는 형태를 의미합니다. 이 글에서는 주어진 1차원 리스트를 원하는 길이별로 잘라내어 2차원 리스트로 변환하는 방법을 소개합니다. 변환 시에는 각 하위 리스트에 포함될 요소 개수를 프로그램에 직접 지정해 줍니다.
append와 인덱스를 활용한 방법
이 방식은 원하는 하위 리스트의 길이 정보(len_2d)를 순회하면서, 슬라이싱 시작 위치 역할을 하는 인덱스(idx)를 0부터 시작해 누적으로 증가시키는 방법입니다. 각 단계마다 listA[idx : idx + var_len] 형태의 리스트 슬라이싱으로 새로운 하위 리스트를 만들고, 이를 결과 리스트에 append로 추가합니다.
예제 코드
# 원본 1차원 리스트
listA = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
# 2차원 리스트로 만들 각 하위 리스트의 길이
len_2d = [2, 4]
# 빈 결과 리스트 선언
res = []
def convert(listA, len_2d):
idx = 0
for var_len in len_2d:
res.append(listA[idx: idx + var_len])
idx += var_len
convert(listA, len_2d)
print("새로운 2차원 리스트:\n", res)
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
실행 결과
새로운 2차원 리스트: [['Sun', 'Mon'], ['Tue', 'Wed', 'Thu', 'Fri']]
itertools.islice를 활용한 방법
islice 함수는 이터레이터에서 지정한 개수만큼의 요소를 잘라낼 때 사용합니다. 여기서는 원본 리스트를 이터레이터로 변환한 뒤, len_2d의 각 값만큼 순차적으로 슬라이스하여 2차원 리스트를 구성합니다. 이 함수는 파이썬 표준 라이브러리인 itertools 모듈에 포함되어 있으므로 별도 설치 없이 import만 하면 바로 사용할 수 있습니다.
예제 코드
from itertools import islice
# 원본 1차원 리스트
listA = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
# 2차원 리스트로 만들 각 하위 리스트의 길이
len_2d = [3, 2]
def convert(listA, len_2d):
it = iter(listA)
return [list(islice(it, i)) for i in len_2d]
res = convert(listA, len_2d)
print("새로운 2차원 리스트:\n", res)
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
실행 결과
새로운 2차원 리스트: [['Sun', 'Mon', 'Tue'], ['Wed', 'Thu']]
두 방법 모두 동일한 목적을 달성할 수 있습니다. 인덱스 기반 슬라이싱은 로직이 직관적이라 이해하기 쉽고, islice 방식은 이터레이터를 활용하기 때문에 대용량 데이터를 다룰 때 메모리 측면에서 더 효율적입니다. 상황과 데이터 크기에 맞는 방식을 선택해 사용하면 됩니다.