티스토리 뷰
데이터 정제를 하다보면 중첩된 리스트를 만날 때가 종종 있다.
항상 꾸역꾸역 처리하긴 했는데, 까먹고 까먹어서 아예 포스팅에 남겨두기로 했다.
자, 오늘 실습을 도와줄 친구는 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 |