basic_loop
공지
제 수업을 듣는 사람들이 계속적으로 실습할 수 있도록 강의 파일을 만들었습니다. 늘 도움이 되기를 바라며. 참고했던 교재 및 Reference는 꼭 확인하셔서 교재 구매 또는 관련 Reference를 확인하시기를 바랍니다.
I. 개요
파이썬 처음 입문하는 사람들을 위해서 작성하였다. Python으로 코드를 작성하다보면, 매우 빈번히 For-loop 구문을 확인할 수 있다. 간단한 코드로 For-loop를 확인해보자.
II. Loop over list
간단하게 for-loop를 작성해보자.
# double list
num = [1.72, 1.67, 1.71, 1.89]
for height in num:
print(height)
1.72
1.67
1.71
1.89
순서대로 출력됨을 볼 수 있다.
(1) Indexes and Values
그런데, 만약 번호를 확인하고 싶다고 하면 어떻게 해야할까? 이 때에는 enumrate()
함수를 사용해보자.
# double list
num = [1.72, 1.67, 1.71, 1.89]
for index, height in enumerate(num):
print("person " + str(index+1) + ": " + str(height))
person 1: 1.72
person 2: 1.67
person 3: 1.71
person 4: 1.89
+1
을 해준 이유는 for loop
시 0부터 출력되기 때문에 임의의 상수 1
을 출력한다.
# double list
num = [1.72, 1.67, 1.71, 1.89]
for index, height in enumerate(num):
index +=1
print("person " + str(index) + ": " + str(height))
person 1: 1.72
person 2: 1.67
person 3: 1.71
person 4: 1.89
index +=
와 같은 방식으로 작성을 해도 된다.
(2) Loop with list of lists
지금까지는 하나의 리스트에 대해서 출력을 했는데, 하나의 리스트 안에 또 다른 리스트가 있다면 어떻게 해야 할까?
class_1 = [["Person A", 1.72],
["Person B", 1.67],
["Person C", 1.55]]
for person in class_1:
print("그 " + person[0] + "의 키는 " + str(person[1]) + "이다.")
그 Person A의 키는 1.72이다.
그 Person B의 키는 1.67이다.
그 Person C의 키는 1.55이다.
이때 person
는 두개의 값을 가지고 있고, 마찬가지로 0부터 접근이 가능하기 때문에 0
과 1
을 통해 접근을 할 수 있다.
III. Pythonic way to write a loop
Pythonic 코드는 무엇인가? 간단히 말하면, 파이썬스럽게 코드를 작성한다는 뜻이다. 초보자에게는 조금 귀찮을 수 있지만, 본디 IT업무가 혼자하기 보다는 다른 시니어 개발자분들과 같이 해야 하기 때문에, 가급적 파이썬스럽게 코드를 작성하는 것을 권한다.
파이썬 사용자라면, 꼭 읽어야 할 책 중의 하나다.
다시 돌아와서, 아래 코드를 보자.
import numpy as np
a = [1, 2, 3]
b = [4, 5, 6]
p = -1
result = np.zeros(len(a)*len(a))
for i in range(0,len(a)):
for j in range(0,len(a)):
p = p + 1
result[p] = a[i] - b[j]
print(result)
[-3. -4. -5. -2. -3. -4. -1. -2. -3.]
여기에서 사용자가 얻으려 하는 결과는 [-3. -4. -5. -2. -3. -4. -1. -2. -3.]
다. 물론, 위 코드에서 구할 수는 있지만, 무언가 불필요한 코드가 많아 보인다.
코드의 가독성도 조금 떨어져 보임을 알 수 있다. 어떻게 수정할까?
(1) 방법 1. for loop를 살리기
일단, for loop를 살린 상태로 수정하겠다. 이때에는 append()
함수를 사용할 것이다.
a = [1, 2, 3]
b = [4, 5, 6]
result = []
for x in a:
for y in b:
result.append(x - y)
print(result)
[-3, -4, -5, -2, -3, -4, -1, -2, -3]
코드가 10줄에서 8줄로 조금 줄어들었지만, 결과는 똑같았다. 그러나 여전히 for loop
가 많아 보인다.
어떻게 줄일까?
(2) 방법 2. Pythonic way
pythonic
방식으로 하면 8줄에서 4줄로 줄일수 있다.
a = [1, 2, 3]
b = [4, 5, 6]
result = [x - y for x in a for y in b]
print(result)
[-3, -4, -5, -2, -3, -4, -1, -2, -3]
(3) 속도 비교
위에서 보는 것처럼 코드가 대폭 줄어드는 것을 확인할 수 있다. 당연히 속도에서도 차이가 날 것이다.
- 첫번째 방법
%%timeit
a = [1, 2, 3]
b = [4, 5, 6]
result = []
for x in a:
for y in b:
result.append(x - y)
100 loops, best of 3: 6.58 ms per loop
- 두번째 방법
%%timeit
a = [1, 2, 3]
b = [4, 5, 6]
result = [x - y for x in a for y in b]
1000000 loops, best of 3: 774 ns per loop
III. 실습파일
- 구글코랩에서 빠르게 실습도 할 수 있습니다. 실습