티스토리 뷰

데이터 정제를 하다보면 중첩된 리스트를 만날 때가 종종 있다. 

 

항상 꾸역꾸역 처리하긴 했는데, 까먹고 까먹어서 아예 포스팅에 남겨두기로 했다. 

 

자, 오늘 실습을 도와줄 친구는 nested 라는 친구다 ! 친구를 소개하겠다.

 

nested

# Out
[[1, 3],
 [1, 2],
 [3, 2],
 [1, 3],
 [2, 1],
 [2, 3],
 [1, 3],
 [1, 2],
 [3, 2],
 [3, 1],
 ...]

 

원래는 더 길다란 녀석이지만 편의를 위해서 짤라버렸다. 싹둑

 

자 이제 처리하는 방법을 알아보자. 처리 방법은 두 가지를 소개하려고 한다.

 

첫 번째, 이중 리스트의 값을 단일 원소로써 하나~~~씩 모두 출력하는 방법

 

두 번째, 이중 리스트의 값에서 안쪽 리스트에 있는 값 ( 예를 들면, [1, 3] , [1, 2] .. ) 을 묶어서 출력하는 방법

 

쓰임새가 서로 틀리기 때문에 상황에 맞게 사용하면 되겠다.


① 모든 원소를 하나씩 출력하기

 

[element for row in nested for element in row]

# Out
[1,
 3,
 1,
 2,
 3,
 2,
 1,
 3,
 2,
 1,
 ...
 ]

 

선 코드 후 설명으로 진행한다. 첫 번째의 경우는 생각보다 간단한데 먼저 앞 쪽의 for row in nested  가 실행된다. 

 

즉, row 에는 nested 친구의 각 인덱스에 해당하는 하나의 리스트가 담기게 된다. 

 

그 다음으로 실행되는 부분이 뒤 쪽의 for element in row 부분이고, element 에는 row 에 담겨있는 인덱스안의 값이 

 

하나씩 들어간다. 그리고 마지막으로 맨 앞의 element 가 출력되는 형태다. 참 쉽죠?

 

 

② 중첩된 내부의 리스트 값을 함께 출력하기

 

[(element for element in row) for row in nested]

# Out
[<generator object <listcomp>.<genexpr> at 0x0000024C508E9C78>,
 <generator object <listcomp>.<genexpr> at 0x0000024C5092CCF0>,
 ...]

 

선 코드 후 설명인데, 이 친구는 조금 까다롭다. 우선 main idea는 괄호로 묶어서 중첩된 내부 리스트가 풀리지 않도록

 

해주는 것이다. 따라서, 첫 번째와 동일하게 바깥 쪽의 for row in nested 를 통해 row 에는 내부 중첩 리스트가 담긴다.

 

그 다음, 안쪽의 괄호 반복문 element for element in row 가 실행된다. 그러나 주의할 점은 위에 출력 값을 적어놓은 것

 

처럼 객체 형태로 출력이 되는데, 여기서 함수를 적용시켜 주어야 정상적으로 출력이 된다.

 

[' '.join(str(element) for element in row) for row in nested]

# Out
['1 3',
 '1 2',
 '3 2',
 '1 3',
 '2 1',
 '2 3',
 ...
 ]

 

짠! 우리가 원하는 형태로 리스트가 바꼇다! 리스트 안의 값이 int형이라 문자열로 바꾼 뒤에 그냥 공백을 join 시켰다.

 

이 부분은 상황에 따라서 바꿔서 적용시키면 된다. 😃

 

혹은 print를 해야할 상황이라면, 아래와 같이 코드를 작성하면 된다 !

 

print('\n'.join([' '.join(str(element) for element in row) for row in nested]))

# Out
1 3
1 2
3 2
1 3
2 1
2 3
1 3
...

 

다른 분들도 도움이 되면 좋겠다. 😘

'프로그래밍 > Python' 카테고리의 다른 글

String List To List !  (0) 2021.03.08
Dictionary → DataFrame 변환하기  (0) 2020.01.07
댓글
링크
최근에 올라온 글
Total
Today
Yesterday