프로그래밍/Python

List안에 List 중첩 될 때 for 쓰는 법

seungdols 2014. 12. 22. 22:01

movies = ['The Holy Grail', 1975, 'Terry Johne & Terry Gilliam', 91, 'Graham', ['Michael', 'Johne Cleese', 'Therry Gilliam', 'Eric Idele']]

>>> for each_item in movies:
   print(each_item)

 
The Holy Grail
1975
Terry Johne & Terry Gilliam
91
Graham
['Michael', 'Johne Cleese', 'Therry Gilliam', 'Eric Idele']
>>>

for 타킷 식별자 in 리스트 :

리스트 처리 구문

for문은 위와 같은 형식으로 구성 되고 indentation을 잘 지켜야 한다.

파이썬은 동적 바인딩 언어로 스코프를 블럭으로 구분하는 것이 아니라

들여쓰기(indentation)으로 구분한다. 그래서 보통 에러는 들여쓰기 오류가 많이 난다.

리스트 구조 안에 리스트가 있다면 for문을 돌고 나면 겉 리스트의 아이템만 제대로 나오고 리스트 형태는 그냥 리스트 형태로 나온다.

그럼 중첩된 리스트 문장은 어떻게? 해결 할까?

>>> for each_item in movies:
   if isinstance(each_item,list):
       for nested_item in each_item:
           print(nested_item)
   else:
       print(each_item)

if문장이 나오고 isinstance 내장함수가 왔다. 좌측 매개변수는 해당 변수, 우측 매개변수는 자료형을 말한다.

우리는 List에 대한 참 거짓을 필요로 하므로 list를 써주었다.

The Holy Grail
1975
Terry Johne & Terry Gilliam
91
Graham
Michael
Johne Cleese
Therry Gilliam
Eric Idele
>>>

리스트 구조가 반복 된다면 어떻게 되는 걸까? = 계속 반복 되는 구조를 for문으로 만들어야 한다.

계속 써줘야 하는 걸까??? = 비효율적이라면 프로그래밍이 아니다.

(물론;; 비효율적인 코딩이 필요할 때가 있으나, 보통 프로그래밍은 효율성을 기반으로 작성한다.)

코드 재사용은 가장 중요한 프로그래밍 기법이다.

어떻게 재사용을 하는가???

함수로 구현하자!

파이썬에서 함수는

def 함수명(인자):

함수 구문

위와 같은 형태로 구성 된다. 선언 후 함수 이름으로 사용한다. 이 말을 보통 Function Call이라고 한다.

>>> def print_lol(the_list):
for each_item in the_list:
if isinstance(each_item,list):
print_lol(each_item)
else:
print(each_item)

위와 같이 함수를 정의한다.

함수를 호출 하면 다음과 같이 결과가 나온다.

>>> print_lol(movies)
The Holy Grail
1975
Terry Johne & Terry Gilliam
91
Graham
Michael
Johne Cleese
Therry Gilliam
Eric Idele

new_movie = ["Hobit",2014,"Spy" ,2013, ["Iron" ,2013,"Out Of The Box",2013],["BoxOff",111,["Bob is .. " , 2015]]]
>>> print(new_movie)
['Hobit', 2014, 'Spy', 2013, ['Iron', 2013, 'Out Of The Box', 2013], ['BoxOff', 111, ['Bob is .. ', 2015]]]

그냥 출력 할 때에는 리스트 구조가 그냥 나오고 중첩이 3번까지 간다. 그럼 조건절을 계속 top-down 해야 한다.

조건절이란? ( if 조건 : 실행 구문 ) 을 말한다.

그러나 , 함수로 정의 하니 훨씬 깔끔하게 끝난다.

물론 print_lol 함수를 정의한 구조는 "재귀"라는 기법으로 자기 자신을 다시 호출하는 방법이다.

재귀에 대한 설명은 나중에...

재귀는 잘 쓰면 잘 쓰는 사람 일 수록 코딩 실력이 높다. (머리에 논리 구조가 아주 명확하다는 증거다.)

결과는 다음과 같다.

>>> print_lol(new_movie)
Hobit
2014
Spy
2013
Iron
2013
Out Of The Box
2013
BoxOff
111
Bob is ..
2015

깔끔하게 끝난다.

반응형

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

데이터를 저장하기?! - pickle 이용  (0) 2014.12.29
파이썬 파일입출력  (0) 2014.12.23
Python과 BeautifulSoup으로 웹페이지 파싱하기  (0) 2014.10.29
5장 반복문 - for  (0) 2014.07.28
5장. 반복문 - while  (0) 2014.07.28