range()
1
2
>>> range(10)
range(0, 10)
0에서 부터 시작해서 10을 넘지 않는 리스트? 셋? 뭐지?
range의 type은 뭘까
1
2
>>> type(range(10))
range
range의 type은 range!! type conversion을 통해 list로 변환은 가능함
1
2
3
4
>>> str(range(10))
'range(0, 10)'
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print() in more detail
나는 3달러를 가지고 있어!라고 말하려 할때 print한번으로 어떻게 표현할까?
1
2
>>> print (3 + 'dollars')
TypeError: unsupported operand type(s) for +: 'int' and 'str'
에러가 난다? 왜? int 3과 str dollars를 구분하기 때문!
3을 str로 변환하여 dollars를 변환하거나
쉼표로 구분함과 동시에 공백을 넣을 수 있음
1
2
3
4
5
6
>>> print (str(3) + 'dollars')
3dollars
>>> print(3, 'dollars')
3 dollars
>>> print (str(3 ) + 'dollars')
3 dollars
1
2
>>> print(3,'dollars','&',2,'cents')
3 dollars 2 cents
사이사이 공백말고 점도 넣어줘
1
2
>>> print(3,'dollars','&',2,'cents',sep=' . ')
3 . dollars . & . 2 . cents
끝에는 new line말고 $$$ 넣어줘
1
2
>>> print(3,'dollars','&',2,'cents',sep=' . ',end='$$$')
3 . dollars . & . 2 . cents$$$
행렬 곱셈
아래 행렬 X와 Y를 곱하시오
1
2
3
X Y
1 2 5 6
3 4 7 8
solution
1
2
3
X * Y = Z
1*5+2*7 1*6+2*8 19 22
3*5+4*7 3*6+4*8 43 50
이를 python으로?
1
2
3
4
5
6
x = [[1,2],[3,4]]
y = [[5,6],[7,8]]
z = [[x[0][0] * y[0][0] + x[0][1] * y[1][0],
x[0][0] * y[0][1] + x[0][1] * y[1][1]],
[x[1][0] * y[0][0] + x[1][1] * y[1][0],
x[1][0] * y[0][1] + x[1][1] * y[1][1]]]
세상 불편..
1
2
3
4
>>> [x[0][k]*y[k][0] for k in range(2)]
5, 14
>>> sum([x[0][k]*y[k][0] for k in range(2)])
19
행렬 X의 첫행 * 행렬 Y의 첫열 = Z[0][0]
1
2
3
4
z = [[sum([x[0][k] * y[k][0] for k in range(2)]),
sum([x[0][k] * y[k][1] for k in range(2)])],
[sum([x[1][k] * y[k][0] for k in range(2)]),
sum([x[1][k] * y[k][1] for k in range(2)])]]
이건 어떨까
sum()은 list가 주어지면 그 안의 값들을 다 더함
range(2)는 0과 1
반복되는 일은 컴퓨터가 하는게 더 정확하고 편함
가능한 컴퓨터가 반복되는 일을 하도록 시키자
이런 자료를 만들도록 할 수는 없을까?
1
2
[[(0,0),(0,1)],
[(1,0),(1,1)]]
있지
1
2
>>> [[(i,j) for i in range(2)] for j in range(2)]
[[(0, 0), (1, 0)], [(0, 1), (1, 1)]]
이를 이용하면 행렬의 곱셈은
1
2
z = [[sum([x[i][k]*y[k][j] for k in range(2)])
for i in range(2)] for j in range(2)]
이렇게 간단해 짐
이거보다 더 간단해질 수 있나?
Iteration statement
1
2
3
4
>>> for i in range(2):
print(i)
0
1
1
2
3
4
5
6
7
>>> for i in range(2):
for j in range(2):
print((i,j))
(0, 0)
(0, 1)
(1, 0)
(1, 1)
우앙 반복문을 사용하니 세상 편함~ (근데 난 이런 생각 어또케 하는건지 대체 모르거따)
1
2
3
4
5
6
7
8
9
10
11
12
>>> for i in range(10):
print(list(range(i + 1)))
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for 구문 안에는 list도 들어갈 수 있음 (순서 보존)
1
2
3
4
5
6
7
8
9
10
>>> for i in [1,2,3]:
print(i)
1
2
3
>>> for i in [3,2,1]:
print(i)
3
2
1
1
2
3
4
5
6
7
8
9
10
11
12
>>> for i in [1,2,3,5]:
print(range(i))
range(0, 1)
range(0, 2)
range(0, 3)
range(0, 5)
>>> for i in [1,2,3,5]:
print(list(range(i)))
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3, 4]
Wrap-up
- Computer programs becomes useful by using iteration
- Complex operations such as matrix multiplication can be simplified with set builder
- Iteration allows programmers to do repetitive works in a simpler way