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]


나는 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