학생을 위한 머신러닝 Python(Second), Chapter4 | Machine-for-Learning-Site Chapter4

중고등학생을 위한 머신러닝

Chapter 4 : 여러 연산자

이전까지 집합과 간단한 출력에 대해서 배웠어요. 머신러닝에서 데이터에 대한 정보의 요약이나 데이터마이닝을 할 때 우리는 관심있는 영역을 제한해야 할 때가 많죠. 그럴 때 수학적으로나 프로그래밍적으로나 생각하기 쉬운 게 집합이에요. 집합을 잘 배웠으니 오늘은 한번 집합 이외에 다른 것들을 어떻게 계산하는 지 배워볼게요. 지겹지만 조금만 더 나가면 진정한 프로그래밍 문제들을 풀 수 있게 될 거에요. 화이팅!

In [1]:
a=5 ; b=2
print a+b;
print a-b;
print a*b;
print a/b;
print a%b;
7
3
10
2
1
파이썬에서 가장 많이 쓰는 연산자들이에요. 차례대로 더하기, 빼기, 곱하기, 몫, 나머지(나누기의)에요.Q1 : a=1239081023890128390 b=123171823781237가 주어져있을 때 위의 연산을 해보세요
In [ ]:
 
그런데 우리는 처음에 집합을 시작했을 때 []로 시작했고, 이게 사실은 집합이 아닌 List라고 했어그런데 우리는 처음에 집합을 시작했을 때 []로 시작했고, 이게 사실은 집합이 아닌 List라고 했어요. List는 일종의 저장소에요. 수들이나 아니면 문자들을 더해나갈 수 있죠
In [2]:
a=[1,2,3,4]; b=[5,6,7,8]
In [3]:
a+b
Out[3]:
[1, 2, 3, 4, 5, 6, 7, 8]
In [4]:
a*3
Out[4]:
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
In [5]:
a=['a','b','c','d'] ; b=['e','f','g','h']
a+b
Out[5]:
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
근데 리스트의 연산을 하고자 할 땐 +보단 이미 List안에 있는 함수들을 이용할 때가 많아요. 저번에 봤던 append처럼 말이죠.
In [6]:
a=['a','b','c','d'] ; b=['e','f','g','h']
a.append(b)
print a
['a', 'b', 'c', 'd', ['e', 'f', 'g', 'h']]
어라? 저번에 append를 배웠었는데 두개가 뭔가 다르네요? 왜 그럴까요? append는 b라는 것을 넣는다는 건데 b 또한 수가 저장되어 있는 저장소이기 때문에 통째로 들어가는거죠.append를 쓰는 이유는 뭘까요? 예를 들어 List안에 List가 아닌 숫자나 문자를 넣고 싶다면 +는 할 수가 없어요. type이 다르기 때문이죠
In [7]:
a=[1,2,3,4] ;b=1 ;c=[2,3]
In [8]:
a+b
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-f1d53b280433> in <module>()
----> 1 a+b

TypeError: can only concatenate list (not "int") to list
In [9]:
a+c
Out[9]:
[1, 2, 3, 4, 2, 3]
In [10]:
a.append(b)
print a
[1, 2, 3, 4, 1]
In [11]:
a.append(c)
print a
[1, 2, 3, 4, 1, [2, 3]]
컴퓨터 입장에서 생각해보면 쉬워요. 문자와 문자를 더해 문자를 나타내고, 숫자와 숫자를 더해 숫자를 반환하는 것처럼 List와 List를 더해 List를 반환해야 하는데 숫자와 더해지니 컴퓨터는 혼돈에 빠져 오류가 발생하는 거죠. 이 외에 List를 더 구체적으로 알아볼게요. extend(확장한다)는 정확히 +와 같은 연산이에요.
In [12]:
a=['a','b','c','d'] ; b=['e','f','g','h']
a.extend(b)
print a
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
그리고 우리는 순서에도 관심이 많을 때가 있다고 했었죠?!
In [13]:
a=['a','b','c','d'] ; b=['e','f','g','h']
a.append(b)
print a
['a', 'b', 'c', 'd', ['e', 'f', 'g', 'h']]
In [14]:
print a[0];
print a[1];
print a[2];
print a[3];
print a[4]
a
b
c
d
['e', 'f', 'g', 'h']
근데 만약 데이터를 잘못 넣어서 제거하고 싶을 땐 어떡할까요?
In [15]:
a.pop()
Out[15]:
['e', 'f', 'g', 'h']
In [16]:
a
Out[16]:
['a', 'b', 'c', 'd']
pop이라는 함수는 뒤에서부터 제거하는 동시에 나가는 데이터를 출력(print)해주는 함수에요
In [17]:
a.pop()
print a
['a', 'b', 'c']
두 번이나 했으니 d까지 빠진거죠!
In [18]:
a=['a','b','c','d'] ; b=['e','f','g','h']
a.append(b)
a[4]
Out[18]:
['e', 'f', 'g', 'h']
처음부터 4번째가 빼고싶을 땐 del(삭제하다)를 사용할 수도 있어요.
In [19]:
del a[4]
print a
['a', 'b', 'c', 'd']
In [20]:
del a[4]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-20-20942bac2219> in <module>()
----> 1 del a[4]

IndexError: list assignment index out of range
아까전에 원소를 뺏으니 그 위치에는 해당하는 값이 없는거죠. 혹은 그 위치에는 값이 없다라고 말해줘서 삭제할 수도 있죠.
In [21]:
a[3:4] = [ ]
print a
['a', 'b', 'c']
슬라이싱을 할 때 마지막꺼는 참조하지 않는다고 했죠?! 3:4면 그냥 3이에요 ㅎㅎQ2 : 아래의 슬라이싱들의 결과를 보면서 어떤 의미일 지 추측해보세요.
In [22]:
a=[1,2,3,4,5,6,7,8,9,10]
#or
a=range(1,11)
In [23]:
#1
a[0:5]
Out[23]:
[1, 2, 3, 4, 5]
0에서부터 (5-1)에 위치한 원소들을 불러낸다
In [24]:
#2
a[1:]
Out[24]:
[2, 3, 4, 5, 6, 7, 8, 9, 10]
1부터 나머지까지 불러낸다
In [25]:
#3
a[-1]
Out[25]:
10
맨 뒤에서 첫 번째를 불러낸다
In [26]:
#4
a[-3:-1]
Out[26]:
[8, 9]
맨 뒤에서 3번째부터 (맨 뒤에서 첫 번째 - 1)의 위치까지 불러낸다
In [27]:
#5
a[:-2]
Out[27]:
[1, 2, 3, 4, 5, 6, 7, 8]
맨 뒤에서 (두번째-1)의 위치까지 불러낸다
In [28]:
#6
a[::]
Out[28]:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
모든 원소들을 불러낸다. ::는 슬라이싱에 같은 간격의 순서(등차수열)들의 위치들을 불러낼 수 있어요
In [29]:
#7
a[::2]
Out[29]:
[1, 3, 5, 7, 9]

equal

In [30]:
#8
a[::3]
Out[30]:
[1, 4, 7, 10]
3씩 더한 위치의 원소들을 불러내는거에요!
In [31]:
#8
a[::-1]
Out[31]:
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
In [32]:
a
Out[32]:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
역으로 불러낸다. append나 extend, reverse(거꾸로 뒤집는다)의 경우는 값을 반환하지 않고 List가 자체가 변하는 반면 a는 단지 슬라이싱했기 때문에 순서가 바뀌지 않아요.
In [33]:
a.reverse()
print a
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
In [34]:
a.reverse()
print a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
두 번 했기 때문에 다시 원위치로 돌아왔죠 ㅎㅎ
In [35]:
%%html
<img src="http://st2.depositphotos.com/1915171/5351/v/950/depositphotos_53513705-stock-illustration-angle-360-degrees-sign-icon.jpg" width="400" height="400">
마지막으로 간단하게 List에 있는 함수들을 소개하고 오늘 강의는 끝내도록 할게요. List에 있는 함수들은 거의 모두 사용할 정도로 많이 쓰이고 있어요. 머신러닝에서 데이터 작업을 하거나 프로그래밍 문제를 풀 때 많이 쓰이죠.
In [36]:
a=range(1,11);b=1;c=[2,3]
a.append(b)
a.append(c)
print a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, [2, 3]]
In [37]:
a.count(1)
Out[37]:
2
a안에 1이 몇개있니?(count = 개수를 세다)
In [38]:
print a.index(1);
print a.index([2,3])
0
11
a안에 [2,3]은 몇 번째 위치에 있니? 1은 몇 번째 위치에 있니? <컴퓨터 처음부터 세기 때문에 0번째 위치만 반환하죠.>근데 빅데이터를 다루다면 데이터가 어디 어디에 위치해있는 지 궁금할 때가 많아요. 그래서 뒤에서 나올 함수를 만들어 의도한 결과를 나타낼 수 있어요.
In [39]:
def want_index(x,n):
    index=[]
    for i,j in enumerate(x):
        if j==n:
            index.append(i)
    return index
In [40]:
want_index(a,1)
Out[40]:
[0, 10]
In [41]:
a.insert(1,10000)
print a
[1, 10000, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, [2, 3]]
a안에 1 위치에 10000을 넣어줘
In [42]:
a.remove(10000)
print a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, [2, 3]]
a안에 10000을 제거해줘
In [43]:
a.remove(1)
print a
[2, 3, 4, 5, 6, 7, 8, 9, 10, 1, [2, 3]]
<컴퓨터 처음부터 세기 때문에 맨 처음에 있는 1만 제거하죠.>
In [44]:
a.sort()
print a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, [2, 3]]
a를 크기 순서대로 정렬해줘.
In [45]:
a.reverse()
print a
[[2, 3], 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
이번 장 내용이 많았는데 공부하느라 너무 고생했어요. 다음 장부터 프로그래밍의 시작이에요. 다들 각오 단단히 하시고, 다음에 봐요!~

good

In [ ]:
 
</body> </html>