언어/파이썬

파이썬 어디까지 파봐썬10강(2)_리스트 평탄화

디지털랫드 2024. 2. 26. 17:02

프로젝트 2 : 리스트 평탄화

리스트 평탄화란?중첩된 리스트가 있을 때 중첩을 모두 제거하고 풀어서 1차원 리스트로 만드는 것을 말합니다.

리스트를 평탄화 하기 전에 반복문 문제로 warm-up 해보겠습니다. 반복문의 기본 구조는 다음과 같았습니다.

for 변수 in 컬렉션:
    수행할 문장

이때 컬렉션은 여러 개의 값을 모아 놓은 집합이라고 했었습니다.
그럼 이번에 다룰 중첩된 리스트도 여러 요소가 모여 있으니 컬렉션이라고 할 수 있겠네요!

그러면 for문의 컬렉션에 중첩된 리스트를 넣어 보고 각각 어떻게 출력되는지 실험하고 관찰해보겠습니다.

 
실행 완료
 

overlap이라는 중첩된 리스트를 만들었습니다. 이 리스트를 컬렉션에 두고 한 요소씩 출력해보겠습니다.

 
 
실행 완료
[1, 2]
3
[[4, 5, 6], 7]
8
9

결과를 보니 가장 바깥 괄호를 기준으로 요소가 출력된 것을 확인할 수 있습니다.

반복문은 range함수와 자주 쓰이지만 이렇게 컬렉션을 차례로 꺼낼 수 있음을 다시 상기시켰습니다. 자, 이렇게 간단하게 for문으로 코딩의 warm-up을 해봤습니다.

이제 본격적으로 프로젝트에 들어가보겠습니다.

[리마인드] 중첩된 리스트가 있을 때 중첩을 모두 제거하고 풀어서 1차원 리스트로 만드는 것을 리스트 평탄화 라고 합니다. 이런 평탄화를 해주는 함수를 만들어 보겠습니다.

 
 
실행 완료
 

중첩된 리스트를 flatten 함수에 넣은 결과가 [1, 2, 3, 4, 5, 6, 7, 8, 9]로 나오게 해야합니다.
이 문제를 풀 때는 리스트의 데이터가 리스트인지 아닌지 구분할 수 있어야 합니다.
type()함수를 사용해서 자료형을 판별하는 것을 활용할 수 있을 거 같습니다.

 
 
실행 완료
[10]:
list

전략을 짜보겠습니다. 함수 안에 새로운 빈 리스트를 만들어 두고 요소의 type을 확인해서 리스트가 아니면 빈 리스트에 그 값을 더하고 리스트면 그 안에 요소가 리스트일지 또 확인해야 합니다.
리스트인 요소 안에 리스트 요소가 있는지 확인하는 것이 재귀적입니다.
재귀 함수를 활용할 수 있겠습니다!

리스트가 아닌 요소가 나올 때까지 재귀적 으로 탐색해보겠습니다.

※ 아래 # 반복문과 재귀를 활용하여 함수 채워봐요. 영역에 코드를 직접 입력해 보세요.

  • 강의 영상을 통해 정답 코드를 확인 하실 수 있습니
 
실행 완료
 

직접 입력한 함수를 넣고 코드 실행버튼을 클릭해 보세요. 실행이 잘 되었나요?

재귀함수를 이해하기에 정말 좋은 프로젝트입니다.

결과를 확인해보겠습니다.

 
 
실행 완료
[12]:
[]

함수가 잘 실행 되는지 확인을 위해 코드 실행 버튼을 클릭해 확인해 보세요.

 
 
 
2:39/5:29
1x