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

Python – 리스트의 리스트에서 열을 개별 요소로 변환하는 방법

Python으로 데이터를 분석하거나 처리하다 보면, 주어진 리스트를 서로 다른 열 구조를 가진 리스트로 재구성해야 하는 상황에 자주 마주하게 됩니다. 이 글에서는 이러한 변환 작업을 수행할 수 있는 대표적인 두 가지 방법을 예제 코드와 함께 살펴봅니다.

방법 1: 슬라이싱(Slicing) 활용

리스트를 특정 인덱스를 기준으로 잘라내어 열 구조를 만들 수 있습니다. 아래 예제에서는 각 행을 중간 지점을 기준으로 분할합니다. n[0:2]는 첫 번째부터 두 번째 요소까지를 하나의 중첩 리스트로 묶고, n[2:]는 세 번째 요소부터 끝까지를 별도의 요소로 분리합니다. 두 개의 for 루프가 사용되며, 바깥쪽 루프는 각 행을 순회하고 안쪽 루프는 분할된 조각들을 펼쳐냅니다.

예제 코드

x = [[5,10,15,20],[25,30,35,40],[45,50,55,60]]
# 리스트 슬라이싱과 리스트 컴프리헨션 활용
print ('입력값 : \n' + str(x))
result = [m for y in [[n[2: ], [n[0:2]]] for n in x] for m in y]
print ('열을 개별 요소로 변환한 결과 : \n' + str(result))

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

입력값 :
[[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60]]
열을 개별 요소로 변환한 결과 :
[[15, 20], [[5, 10]], [35, 40], [[25, 30]], [55, 60], [[45, 50]]]

출력 결과를 보면 각 행이 두 부분으로 나뉩니다. 후반부인 [15, 20]은 그대로 요소로 들어가고, 전반부인 [5, 10]은 한 겹 더 감싸인 중첩 리스트 [[5, 10]] 형태로 저장됩니다.

방법 2: itertools.chain()과 리스트 컴프리헨션 활용

두 개의 for 루프를 중첩해 사용하는 대신, itertools 모듈의 chain() 함수를 활용할 수도 있습니다. 리스트 컴프리헨션으로 분할 로직을 적용한 뒤 chain으로 평탄화하면, 앞선 방법과 동일한 결과를 더 간결한 코드로 얻을 수 있습니다.

예제 코드

from itertools import chain
x = [[5,10,15,20],[25,30,35,40],[45,50,55,60]]
# 리스트 슬라이싱과 리스트 컴프리헨션 활용
print ('입력값 : \n' + str(x))
res = list(chain(*[list((n[2: ], [n[0:2]]))
    for n in x]))
print ('열을 개별 요소로 변환한 결과 : \n' + str(res))

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

입력값 :
[[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60]]
열을 개별 요소로 변환한 결과 :
[[15, 20], [[5, 10]], [35, 40], [[25, 30]], [55, 60], [[45, 50]]]

마무리

리스트의 리스트에서 특정 열을 분리해 개별 요소로 변환할 때는 슬라이싱과 리스트 컴프리헨션만으로도 충분히 구현할 수 있으며, 중첩 루프를 줄이고 싶다면 itertools.chain()을 함께 사용하면 됩니다. 데이터 전처리 과정에서 리스트 구조를 유연하게 다루는 데 유용한 기법이니, 상황에 맞게 활용해 보시기 바랍니다.