본문 바로가기

Hacks

2차원 배열을 1차원 배열로 변환하는 방법

1. sum 함수를 사용하여 1차원 배열로 변환하기

num_list = [[0, 1, 1, 0, 1, 0, 0], [0, 1, 1, 0, 1, 0, 1]

# 2차원 배열에서 1차원 배열로
num_list = sum(num_list, [])

결과값은

num_list => [0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1]

 

이렇게 변환될 수 있는 이유는 sum 함수의 계산 과정에 있다.

보통 sum 함수는 sum(iterable)로 많이 사용되어, iterable 객체에 있는 요소들의 합을 반환해준다.

하지만, sum 함수에는 2개의 파라미터를 넣을 수 있다.

 

sum(iterable, start)

start는 간단히 말하면, iterable의 sum 값에 start를 더해줄 것이라는 말이다.

 

그럼 sum(num_list, [])는 [] + [0, 1, 1 ~] + [0, 1, 1 ~]이 된다.

빈 리스트 + 데이터가 들어 있는 리스트 + 데이터가 들어 있는 리스트인 것이다.

빈 리스트는 여기에서 아무런 영향도 주지 않고, [0, 1, 1 ~] + [0, 1, 1~] 즉, 리스트끼리의 합은 합병이 되기에

1차원 배열로 변환이 되는 것이다.

 

2. List comprehension을 이용한 배열의 차원 변환(2차원 -> 1차원)

num_list = [data for inner_data in num_list for data in inner_data]

위는 아래와 같다. (위의 num_list라는 변수명을 arr로 바꾼 것이다.)

for inner_data in num_list:
   for data in inner_data:
      arr.append(data)