Show for n in list 이해Prerequisites (미리 알아야 할 것들)변수, 리스트 등등 주로 Python 배울 때 for문 이전에 오는 내용은 사전에 마스터한 후에 이 포스팅을 보시기 바랍니다. 포스팅 요청은 댓글로!
For문 쉽네우선 for문의 가장 기본적인 형태부터 살펴볼게요 list = [ 1, 2, 3 ]for n in list: 이런 간단한 for문은 영어 그대로 읽어서 이해하실 수 있을 거에요 — “L 내의 모든 수 n에 대해서, n을 출력하라”. 수학 전공 과목에서 쓰는 문법과 동일하죠? 말 그대로 다음과 같은 출력이 나올 겁니다. 1 쉬워 쉬워~그러면 L내의 모든 원소를 제곱시키는 코드를 짜볼까요? list = [ 1, 2, 3 ]for n in list: 이러면 되겠죠? 요것도 영어 그대로 읽으면 — “L 내의 모든 수 n에 대해서, n을 제곱시켜라”. 그럼 출력을 확인해 볼까요? [ 1, 2, 3 ]
For문 어렵네사실 L내의 모든 원소를 제곱시키는 코드는 이겁니다. list = [ 1, 2, 3 ] 멘붕이 오죠!
이렇게 for문이 조금만 복잡해지면 그 의미가 자연스럽게 와닿지가 않아요😔. 이럴 때는 for문을 이과 style로 명.확.하.게 분석해야 깔끔하게 이해할 수 있습니다. 아까 본 간단한 예제부터 다시 살펴볼게요! For문: 이과 style사실 for문은 반본적인 코드를 짧고 심플하게 쓸 수 없을까 하는 고민에서 나온 겁니다. 그러면 아까 본 예시는 어떤 코드를 짧게 쓸려고 한걸까요? list = [ 1, 2, 3 ]# 아까 본 예시 (짧고 심-플) 바로 이겁니다! 단순히 이해 돕기 위해 비유적으로 나타낸 코드가 아닙니다. for문을 사용한 위쪽의 짧-고 심플한 코드와 그 아래쪽의 깔-끔하고 반복적인 코드는 완벽히 똑같은 코드입니다. 어려운 for문을 처음 접할 때는 깔-끔하고 반복적인 코드를 생각하면서 분석하는게 좋아요. 코드가 길긴 하지만 익숙하니까요. 그리고 6–7번 정도 해보면 눈으로만 봐도 자연스럽게 이해할 수 있는 수준이 되실 겁니다.
반복 연습 1자 그럼, 아까 본 틀린 원소 제곱 코드를 깔-끔하게 살펴볼게요. list = [ 1, 2, 3 ]# 심-플 이걸 보면 list가 왜 변하지 않았는지 아시겠죠? 저희는 n 친구만 가지고 놀았던 겁니다 😔 정말?저한테 물어보지 말고 우리의 뱀* 친구한테 물어보세요! 코드가 여기를 지날 때 이 변수의 값이 뭐지? 궁금증이 들면 print(“설명”, 변수)를 넣고 돌려보시면 됩니다. list = [ 1, 2, 3 ]for n in list: 출력 결과 n1: 1
반복 연습 2이제 좀 더 어려운 원소 제곱 코드를 살펴볼게요. 제대로 돌아가는 걸로. list = [ 1, 2, 3 ]# 심-플 우선 코드를 직접 이해해보시고 설명을 읽어주세요! 간단히 설명드리기 전에 용어만 몇가지 정하고 갈게요. 리스트 내의 숫자 list[0], list[1], list[2]를 원소라고 부르고, 그 원소들이 리스트 상에 있는 위치 0, 1, 2를 인덱스라고 부르겠습니다. for문 친구가 n에다가 list의 원소들을 하나하나 넣어주는 덕분에 저희는 n ** 2으로 원소의 제곱을 구할 수 있어요. 그런데, 그 제곱값을 다시 list에 넣어주려면 어디에 넣을지 list[인덱스] 이렇게 지정해줘야 하잖아요! 그 인덱스는 for문 친구가 알아서 만들어주지 않아요 😔. 그래서 저희가 인덱스로 쓰기 위해 i라는 변수를 만들고 1씩 더해줬어요. for문 파악 팁Python 코드가 실행되는 과정은 이렇게 생각하시면 됩니다. 프로그램을 실행하면, 우리 뱀 친구가 코드의 실행 순서에 맞게 코드를 한줄 한줄 읽는 겁니다. 뱀 친구의 눈길그래서 뱀 친구의 눈길을 우리가 그대로 따라가면 복잡한 for문도 확실하게 이해할 수 있습니다. 핵 발전에도 Python은 쓰입니다. PyRK: A Python Package For Nuclear Reactor Kinetics이렇게 실행 순서를 따라 화면 상의 코드를 한줄 한줄 짚어보세요. 그 과정에서 이 변수 저 변수가 어떻게 변하는지 따라가보면 코드가 하는 일을 명확하게 파악할 수 있습니다. 시간은 조금 걸려요.
불쌍한 for문 친구아까 본 코드의 깔-끔한 버젼 다시 살펴볼게요 i = 0 이 코드를 보면 사실 for문 친구한테 미안해지죠 😔. 어차피 i 인덱스 변수 만들거면서 list[i] ** 2를 쓰면 되지 굳이 list 원소 가져와서 n에 넣어달라고 하고 말이죠. 조별과제에서 자료 조사해왔더니 PPT 만드는 친구가 그 자료 쓰지도 않는 꼴.
그냥 for문 친구한테 처음부터 i 인덱스를 가져와달라고 하는건 어떨까요? index_list = [ 0, 1, 2 ]i = index_list[0] 요렇게. 참고로, i = 0 이렇게 안하고 i = index_list[0]로 쓴 이유는 뭘까요? for문 친구는 리스트 내의 원소를 가져오는 것만 알아요.
그래서 위와 같이 코드르 짜야만… for i in [ 0, 1, 2 ]: 이렇게 for문으로 심-플하게 바꿀 수 있어요! 그런데 리스트 길이가 항상 3은 아니잖아요? 그러면 0부터 <리스트의 크기> - 1까지의 숫자를 담은 리스트는 어떻게 만들까요? 두 가지 함수를 사용하면 됩니다.
for문의 새로운 형태for i in range(len(list)): 두 개의 함수를 활용하면 이렇게 짤 수 있겠죠! 💃🕺 list = [ 1, 2, 3 ] 즉, 이 코드와 list = [ 1, 2, 3 ] 이 코드도 완벽히 똑같은 코드입니다. 아래쪽이 더 깔끔해 보이죠? 그래서 인덱스가 필요한 경우에는 이러한 형태의 for문을 주로 사용하게 됩니다. 원본 list를 수정하는 경우에도 쓰일 수 있고, 인덱스를 함께 출력하는 경우, list 내에서 값을 옮기는 경우 등등 다양하게 사용됩니다. 정리1. 리스트 원소만 필요한경우for n in list: 2. 리스트 인덱스까지 필요한 경우for i in range(len(list)): 3. 코드 분석할 때 뱀 친구 따라 한줄씩 읽자4. 많은 코드를 읽어보자수고하셨습니다 💃🕺 |