In [1]:
animals = ['cat', 'dog', 'mouse']
In [2]:
for x in animals:
print("This is the {}.".format(x))
In [3]:
for x in animals:
print("{}!, this is the {}.".format("Hi", x))
아래와 같이 인덱싱을 이용하는
방식으로도 사용할 수 있다. 서식이 있는 print
문에 대해서는 이후에 보다 다양한 예제를 살펴볼 것이다.
In [4]:
for x in animals:
print("{1}!, you are {0}.".format("animals", x))
In [5]:
for letter in "Hello World":
print(letter)
In [6]:
a = range(10)
a
Out[6]:
range
와 거의 동일한 역할을 수행하지만 리스트 전체를 보여주지 않는 xrange
가 있다.xrange(n)
이 리턴하는 리스트의 원소들은 인덱싱을 통해서만 확인할 수 있다.xrange
는 굳이 원소 전체를 알 필요가 없고 단순히 카운팅만이 필요할 경우 보다 range
보다 빠르게 리스트 원소에 접근하여 프로그램의 실행속도를 증가시키는 데에 활용할 수 있다.xrange
함수가 사용되지 않는다. range
함수만 사용할 것을 추천한다.
In [7]:
b = xrange(10)
b
Out[7]:
In [8]:
a[5]
Out[8]:
In [9]:
b[5]
Out[9]:
In [10]:
a[2:6]
Out[10]:
In [11]:
c0 = range(4)
c0
Out[11]:
In [12]:
c1 = range(1, 4)
c1
Out[12]:
In [13]:
c2 = range(1, 10, 2)
c2
Out[13]:
range
함수는 for
문에서 유용하게 활용된다.
In [14]:
for i in range(6):
print("the square of {} is {}").format(i, i ** 2)
단순한 카운트 역할을 수행하는 용도로 range
함수를 활용할 수도 있다.
In [15]:
for i in range(5):
print("printing five times")
C 또는 Java 언어에서와는 달리 파이썬에서는 for
문에서 사용되는 변수는 지역변수가 아님에 주의할 것.
In [16]:
i
Out[16]:
In [17]:
def range_double(x):
z = []
for y in range(x):
z.append(y*2)
return z
range_double(4)
Out[17]:
In [18]:
def skip13(a, b):
result = []
for k in range (a,b):
if k == 13:
pass # 아무 것도 하지 않음
else: result.append(k)
return result
In [19]:
skip13(1, 20)
Out[19]:
리스트를 활용하여 큐(queue) 자료구조를 구현할 수 있다. 큐를 구현하기 위해서는 보통 다음 함수들을 함께 구현해야 한다.
add(name)
: 새로운 손님이 추가될 경우 손님의 이름을 큐에 추가한다.next()
: 대기자 중에서 가장 먼저 도착한 손님 이름을 리턴한다.show()
: 대기자 명단을 보여(print)준다.length()
: 대기자 수를 리턴한다. 준비사항:
q = []
를 전역변수로 선언하여 활용한다.
In [20]:
q = []
In [21]:
def add(name):
q.append(name)
def next():
return q.pop(0)
def show():
for i in q:
print(i)
def length():
return len(q)
In [22]:
add("SeungMin")
In [23]:
q
Out[23]:
In [24]:
add("Jisung")
In [25]:
q.pop(1)
Out[25]:
In [26]:
q
Out[26]:
In [27]:
next()
Out[27]:
In [28]:
add("Park")
In [29]:
add("Kim")
In [30]:
q
Out[30]:
In [31]:
show()
In [32]:
length()
Out[32]:
In [33]:
next()
Out[33]:
In [34]:
add("Hwang")
In [35]:
show()
In [36]:
next()
Out[36]:
In [37]:
show()
예제: 아래 iterate
함수는 특정 함수 f
를 인자 x
에 n
번 반복적용한 결과를 리턴하는 함수이다.
In [38]:
def iterate(f, x, n):
a = x
for i in range(n):
a = f(a)
return a
# 반 나누기를 원하는 만큼 반복하고자 하면 f 인자에 아래 divide_2 함수를 입력하면 된다.
def divide_2(x):
return x/2.0
iterate(divide_2, 64, 3)
Out[38]:
In [39]:
x = 64
while x > 1:
x = x/2
print(x)
In [40]:
eps = 1.0
while eps + 1 > 1:
eps = eps / 2.0
eps + 1 > 1
# print("A very small epsilon is {}.".format(eps))
Out[40]:
In [1]:
def n_divide(n):
a = []
for i in range(n+1):
d = 1-(float(n-i)/n)
a.append(d)
return a
n_divide(10)
Out[1]:
[0.0, 0.1, 0.2, 0.3, ..., 0.9, 1.0]
을 기대하였지만 다르게 나왔다. n_divide
함수를 아래와 같이 코딩해 보자.
In [3]:
def n_divide1(n):
a = []
for i in range(n+1):
d = (float(i)/n)
a.append(d)
return a
n_divide1(10)
Out[3]:
견본답안 1과 2의 결과가 다르게 행동하는 이유는 아래와 같다.
a
와 b
가 양의 실수라 가정하자.a - b
를 계산할 때 a + (-b)
로 바꾸어 계산한다.-b
를 먼저 계산한다. 이때 좀 복잡한 방식으로 계산한다.