26 Sep 2017 » python

2017-09-26-python_3

유용한 제어문을 정리해보자.

  • if / elif / else
  • for / range
  • while / break / continue
  • enumerate
  • dictionary loop
  • list comprehension

Python Indentation 들여쓰기

4 spaces

number of spaces: block level

If / elif / else

In [1]:
if 2**2 == 4:
    print('Obvious!')
Obvious!
In [2]:
a = 10

if a == 1:
    print(1)
elif a == 2:
    print(2)
else:
    print('A lot')
A lot

for / range

range

  • python에서는 마지막 숫자는 포함되지 않는다.
In [3]:
# 0, 1, 2, ..., 9
range(10)
Out[3]:
range(0, 10)
In [4]:
for i in range(4):
    print(i)
0
1
2
3
In [5]:
i
Out[5]:
3
In [6]:
# 5, 6, 7, 8, 9
range(5, 10)
Out[6]:
range(5, 10)
In [7]:
x = ["a", "b", "c", "d", "e"]

for i in range(1, 4):
    print(x[i])    
b
c
d
In [8]:
for word in ['cool', 'powerful', 'readable']:
    print('Python is {}'.format(word))
Python is cool
Python is powerful
Python is readable
In [9]:
x
Out[9]:
['a', 'b', 'c', 'd', 'e']
In [10]:
for xi in x[1:4]:
    print(xi)
b
c
d

while / break / continue

In [11]:
z = 1 + 1j

# z의 절대값이 100보다 커질 때까지 루프 돌아라.
while abs(z) < 100:
    z = z**2 + 1
    print(z, abs(z))
z
(1+2j) 2.23606797749979
(-2+4j) 4.47213595499958
(-11-16j) 19.4164878389476
(-134+352j) 376.64306710730784
Out[11]:
(-134+352j)

break

루프에서 그만하고 빠져 나올 때, break한 후의 값은 가장 마지막 루프값이다.

In [12]:
z = 1 + 1j
while abs(z) < 100:
    if z.imag < 0:
        print("break!")
        break
    z = z**2 + 1
    print(z)
z
(1+2j)
(-2+4j)
(-11-16j)
break!
Out[12]:
(-11-16j)

continue

아래 연산을 따라가면 element는 분모!

0이 되면 안되므로, 0이 나오면 처리하지 말고 다음 값을 계속 처리하고 싶을 때 아래와 같이 사용하면 된다.

  • 예외처리의 한 방법
In [13]:
a = [1, 0, 2, 4]
for element in a:
    if element == 0:
        continue
    print(1. / element)
1.0
0.5
0.25

Enumerate

아래와 같이 enumerate( )를 사용하면, 인덱스도 함께 만들어 준다.

  • 자동 인덱스의 기능!
In [14]:
words = ('cool', 'powerful', 'readable')
for i in range(len(words)):
    print((i, words[i]))
(0, 'cool')
(1, 'powerful')
(2, 'readable')
In [15]:
words = ('cool', 'powerful', 'readable')
for i, item in enumerate(words):
    print((i, item))
(0, 'cool')
(1, 'powerful')
(2, 'readable')

Dictionary Loop

In [16]:
d = {'a': 1, 'b':1.2, 'c':1j}
d.items()
Out[16]:
dict_items([('a', 1), ('b', 1.2), ('c', 1j)])

사전의 경우 아래 두 가지 방법으로 루프를 돌릴 수 있다.

  1. key, value로 각각 받기.
  2. 딕셔너리의 엘리먼트로 받기.
In [17]:
for key, val in sorted(d.items()):
    print('Key: {} has value: {}'.format(key, val))
Key: a has value: 1
Key: b has value: 1.2
Key: c has value: 1j
In [18]:
for item in sorted(d.items()):
    print('item:', str(item))
item: ('a', 1)
item: ('b', 1.2)
item: ('c', 1j)

List Comprehensions

List Comprehensions을 되도록이면 사용하도록 하자!!

%%timeit

속도를 측정해주는 magic

In [19]:
%%timeit
x = range(10000)
y = []
for i in x:
    y.append(i * 2)
1.48 ms ± 121 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [20]:
%%timeit
y = [i*2 for i in range(10000)]
725 µs ± 14 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

List Comprehensions의 속도가 훨씬 빠르다.

  • 결과물은 같다.


Related Posts