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

Python – 1차원 리스트를 가변 길이의 2차원 리스트로 변환하는 방법

파이썬에서 일반적인 리스트는 요소가 차례대로 나열된 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 방식은 이터레이터를 활용하기 때문에 대용량 데이터를 다룰 때 메모리 측면에서 더 효율적입니다. 상황과 데이터 크기에 맞는 방식을 선택해 사용하면 됩니다.