가상환경 만들기 - 앞에서 언급했다시피, 파이썬에서 개발의 용이성(?) 다양성(?)을 위해서 가상환경을 만들어서 개발하여야 한다고 했다. (반말이 작성하기 편하다....) 그런데 이번에 Surface를 중고로 사서 설치를 하는데 정작 웹을 보고 따라하고 있다. 이 무슨 상황인가 ㅎㅎㅎ 그래서 블로그에 포스팅하고자 한다.  

1. 가상환경 만드는 법.

일단 아나콘다(에 있는 파이썬)는 설치 했다고 가정한다. 아나콘다의 설치는 그냥 Next, Next고 Path를 자동으로 잡아주겠냐에 체크를 해주면 된다. 그리고 설치하면 된다. 

2. IDE (VS_CODE) 설치

IDE 설치하고 싶지 않으면 넘어가도 된다. iPython, Jupyter notebook이나 spyder 같은 IDE가 기본으로 존재하니깐. 그냥 아나콘다 Prompt를 실행해서 설치하면 된다.

3. Anaconda prompt를 관리자 권한으로 킴.

3.1. 가상환경 만들기

$ conda -n "envname" python = "버전" #괄호안은 자기가 마음대로 써도 됨. 

3.2. 잘못 만들었을 경우, 가상환경 지우기

$ conda remove --name "지울 가상 환경 이름" --all #괄호안은 자기가 마음대로 써도 됨. 

주) VS_CODE를 IDE로 사용 할 경우, Pompt가 powershell이면 (가상환경)c:\ 이렇게 뜨지 않는다. prompt를 cmd로 변경해야 한다. 이것 때문에 해맸다.

Ubuntu는 처음에 cmd로 설정이 되지만 windows는 powershell로 설정이 된다. customize어쩌구를 클릭하면 cmd로 설정하는 창이 나온다.

'머신러닝 > 기초 문법' 카테고리의 다른 글

0. 파이썬 출력 end=''  (0) 2019.06.20
0. 파이썬 출력print and sep  (0) 2019.06.20
9. 함수  (0) 2019.02.12
8. FOR문  (0) 2019.02.11
7. While. Break, Continue  (0) 2019.02.10

지금까지는 프로그램의 조각들만 살펴 보았지만 지금부터는 조금 더 큰 프로그램들을 살펴 볼 것입니다. 

<프로그램 처리 --> 함수 처리 -> 뭔가를 실행 --> 프로그램 처리 됨 >

이러한 방식으로 지금까지보다 조금 더 큰 방식을 처리 할 수 있습니다. 즉, 함수 자체에 프로그램을 넣을 수 있는 것입니다. 또, 함수 자체에도 종류가 있으니(함수애도 사용되는 빈도는 차이가 있습니다만..)알아 두시면 큰 도움이 됩니다. 그러면 지금부터 함수에 대해서 간단히 알아 보도록 하겠습니다. 

함수의 정의 방식은 간단히 

def 함수명(a,b):

code


이렇게 정의 하시면 됩니다. 

Main, 즉, 함수에 들어가지 않는 Code에서 전달되는 측의 변수는 a,b로 쓸 수 있고, Call 해야 함수를 사용 할 수 있습니다. 즉, main 측에서 function의 이름을 써야 사용 할 수 있다는 것입니다. 하지만 매개변수 [함수의 ( ) 안에 들어가는 변수]가 없는 함수도 있으므로, function을 부를 때 사용하지 않을 수도 있습니다. 

말로 하기만 하면 복잡하니 코드를 직접 보면서 설명 하도록 하겠습니다.

1. 입력 값x 출력 값x

def function_a():
    print("no_in and out")


function_a()

no_in and out

매개변수도, 전달값도 없는 변수는 위와 같이 사용합니다. 함수의 안에 아무 것도 없으니, 불러 올 때도 함수의 이름만 쓰면, 함수가 불러지겠죠? 그리고, 함수의 안에 있는 내용도 불러 질 것 같습니다. 그리고 실제로 그렇게 됩니다. 간단하기 때문에 제가 즐겨 쓰는 함수죠 ㅎㅎ

2. 입력값o 출력 값x

def function_c(d,e): print(d+e) function_c(2,3)

5

반면에 매개변수가 있고 출력값(return 값)이 없는 함수는 함수 이름을 쓰고 함수를 부를 때 함수의 이름을 쓰고, 함수 안에[ ()안에 ] 값을 써줘야 합니다. 그래야 함수가 적절한 값을 출력해 줍니다. 값이 나오는데 왜 출력값이 없다는 걸까? 라는 생각을 처음에 많이 했는데 프로그램에서는 return값이 없으면 무조건 출력값이 없다고 합니다. 

만약 function_c를 어떤 변수에 대입하고 변수를 출력하면 None값을 출력 할 것 입니다. 


3.입력 값x 출력 값o


def function_d():
    return 3/4

g = function_d()

g

0.75

반면에 입력 값이 없고 출력값(return 값)만 존재하는 함수는 함수를 부를 때 입력 값을(g) 찍어 주고, 그 안에 함수를 넣어 줘야 제대로 된 값이 출력이 됩니다. 입력 값이 없기 때문에 함수에서도 ( ) 안에 아무것도 넣을 필요가 없겠죠? 조금 보면 아시라고 생각됩니다. 하지만 2, 3 번은 별로 아실 필요가 없습니다 ㅎㅎ 잘 사용되지 않기 때문이죠. 사실 1, 4 번만 좀 알아 두시면 됩니다. 자주 사용하는 것은 사실 4번이고 , 개인적으로 선호하는 것은 1번입니다 !


가장 빈번하게 사용되는, 입력 값도 있고, 출력 값도 있는 함수는, 다음과 같은 형태를 취하는데, 

4. 입력 값o 출력 값o

def function_b(a,b,c):
    return pow(a,b)/c


function_b(1,2,3)
0.3333333333333333


함수 안에 모든 프로그램을 구현한 다음에, 어떤 변수를 받을 지 생각하고, 그 변수를 MAIN의 함수에서 던져주면 끝난다, 즉, 여러가지를 생각해야 하지만 쉬운 구현이 가능하다는 장점이 있습니다. 많은 것을 생각해야 한다는 단점은 있지만 코드가 짧아진 다른 장점이 있습니다. 저 같은 경우는 앞에서 언급했다시피 아무것도 없는 첫번 째 경우를 가장 선호하지만 말입니다 ㅎㅎ


2019/02/11 - [OS and 코딩/파이썬] - 8. FOR문

2019/02/10 - [OS and 코딩/파이썬] - 7. While. Break, Continue

2019/02/09 - [OS and 코딩/파이썬] - 6. IF 문


'머신러닝 > 기초 문법' 카테고리의 다른 글

0. 파이썬 출력print and sep  (0) 2019.06.20
가상환경 만들고 삭제하기  (0) 2019.02.14
8. FOR문  (0) 2019.02.11
7. While. Break, Continue  (0) 2019.02.10
6. IF 문  (0) 2019.02.09

저번에 While, break, continue문에 대해서 간단하게 알아 보았고, 이번에는 for문에 대해서 알아 봅시다. 같은 반복문이지만 앞에 언급했다시피, for문은 반복횟수가 확실히 정해져 있을 때 쉽게 사용할 수 있습니다. 알고리즘 자체가 쉽기 때문입니다. 

for문은 기본적으로 iterable 리스트에 for 시작변수 in [리스트] 와 같은 형식으로 사용 할 수 있습니다. 또는 range(0,n)은 iterable변수를 0....n까지 생성 할 수 있으므로, 리스트 대신에 사용 할 수 있습니다. 즉, in 뒤에는 iterable값이면 아무 거나 들어 갈 수 있다는 것입니다. 다른 언어보다 직관적이고 확실히 편리합니다. 

for문의 사용 방법은 다음과 같습니다. 

1. For 문


list_a = ['1','kim','jamwon','seoul','phone'] for h in list_a: list_a list_a

['1', 'kim', 'jamwon', 'seoul', 'phone']


for i in range(0,10):   
    a = pow(i,2)
    print(i,a)  

0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81


list의 값을 순차적으로 꺼내거나, 값을 생성하여, 이에 대해 index를 부여한 다음, 차례대로 꺼내는 것도 가능합니다. 즉, list든 변수든, iterable한 객체이면 for문에서 사용하는 데 문제는 없다는 얘기입니다. 이것만 지키면 상관없습니다.


Continue문을 좀 살펴 보겠습니다.


for j in range(0,10):
    if j%2==0:
        continue
    print("%d" %j)

1 3 5 7 9

10까지의 값을 하나씩 프린트 하는데, 2로 나눈 나머지 값이 0이 되는 것 (j%2==0)에서는 순차적으로 내려가서 프린트하지 않고 제어를 다시 for문으로 돌려 버립니다. 그러니까 출력되지 않겠죠? 이렇게 Continue문은 For문과도 함께 사용될 수 있다는 것을 알아 둡시다. 

for문에서 가장 먼저 배우는 별찍기는 생각보다 파이썬에는 상당히 쉽습니다. line by line이 자동으로 변하기 때문입니다. 

for c in range(0,11):
    print("*"*c)


*
**
***
****
*****
******
*******
********
*********
**********

C 언어와 같은 경우에는 중복 For문을 사용하고 막 별짓을 다 해야 해서 처음 접하는 사람에게는 좀 어려웠는데 파이썬은 딱 직관적으로 느껴지네요. 첫 line에서 하나를, 두 번째 line에서 2번을, 곱하기로 하는 거니 아시겠죠? 정말 직관적이고 쉽습니다.

1. For 

2. 중복 For 문


하지만 이 별을 여러 번 찍어 준다. 하면 좀 다릅니다. 먼저, 중복 for문의 개념에 대해서 알아 보면


for i in range(0,n):

...

for j in range(0,m):

...

처럼 코드가 있으면,

j 및의 코드를 m번 까지 모두 반복한 다음에, 바깥 for문을 한 번 처리 하고 최대 n번 반복하는 것입니다. 이것은 for문이 3개, 4개 있어도 동일하게 적용됩니다.


*
**
***
****
*****
******
*******
********
*********
**********



*
**
***
****
*****
******
*******
********
*********
**********



*
**
***
****
*****
******
*******
********
*********
**********


그러면 중복 for문의 개념을 적용해서 위와 같이 한 번 별을 찍어 주고, 띄어 쓰기 해주고, 한 번 별을 찍어주고, 띄어쓰기 해주고, 이런 식으로 출력해 주고 싶습니다. 어떻게 해야 할까요?


for b in range(0,11):
    print("\n")
    for b in range(0,11):
        print("*"*b)

위와 같이 써주면 됩니다. 참 쉽죠? 

띄어쓰기 라인에 첫번째 For문을 넣어주고, 그 안에, 반복되는 라인에, *을 찍어주는 For문을 넣어주시면 됩니다.  그러면 *을 모두 찍어준 다음에, 한 번 띄어쓰기 해주고, 다시 *를 찍어주고, 다시 띄어쓰기 하고.....를 반복하고 프로그램을 종료하게 됩니다. 

마지막으로 중복 For문의 개념을 알아 보기 위해서 구구단을 출력하는 간단한 프로그램을 살펴보면

for k in range(1,10):
    for l in range(1,10):
        print("%d*%d" %(k,l))   
    if l==9:
        print("=============================================")

1*1 1*2 1*3 1*4 1*5 1*6 1*7 1*8 1*9 ============================================= 2*1 2*2 2*3 2*4 2*5 2*6 2*7 2*8 2*9 =============================================

다음과 같이 출력하면 됩니다. 1단을 먼저 출력하기 위해서 %d (앞에 for문) * %d (뒤에 for문)를 하는데 뒤에 for문은 처음에 9까지 반복이 됩니다. 그리고 9까지 반복이 ㅐ되면 1단인지 2단인지 구분하기 위해서 "======================"가 출력이 되고, 다음 줄로 넘어갑니다.  

중복  For문이 처음에 헷갈 릴 수도 있겠지만 여러번 보시다보면 금방 익숙해 지실 겁니다. 또 파이썬은 간단히 직관적으로 써놨기 때문에 금방 익숙해 지시겠죠. 그럼 다음엔 함수로 찾아오도록 하겠습니다. (__)


'머신러닝 > 기초 문법' 카테고리의 다른 글

가상환경 만들고 삭제하기  (0) 2019.02.14
9. 함수  (0) 2019.02.12
7. While. Break, Continue  (0) 2019.02.10
6. IF 문  (0) 2019.02.09
주피터 노트북 블로그에 맞기 정렬하기  (0) 2019.02.08

저번에는 기본적인 제어문인 IF문에 대해서 알아 보았습니다. IF문은 A하면 B한다라는 언어인 반면, 반복문은 A라는 조건을 만족하면, B를 계속 실행한다. 입니다. 반복문에는 큰 틀에서 While문과 For문 두 가지가 있습니다. 두 구문의 차이를 구별하면 For문은 반복 횟수를 정확히 알 경우에 사용하고, While문은 반복 횟수를 정확히 모를 때 사용합니다.

 그리고 사실 While문은 반보문으로, 여러구문을 처리해주는 역할을 담당하긴 하지만, 이 구문 자체만으로는 그다지 큰 쓸모가 없습니다. 나중에 학습할 For문이 개인적으로 더 간략하고, 사용하기 쉽기 때문이죠. 그 보다는 Break, Continue문과 함꼐 쓰입니다.

 

말로 하는 것 보다는 실제 코드를 보면서 하는 편이 나을 것 같습니다. 먼저 가장 간단한 While문의 구조부터 보겠습니다.

 

1. While
import numpy as np
:
A = 0
i = 0

 

while A < 10:
    A = A+1
    print("%d" %A)
A

 

1 2 3 4 5 6 7 8 9 10

while 조건:

코드

기본적인 구조는 매우 간단합니다. 정수 A 0이 10이 될 때까지 하나 씩 더해가면서, 형식 지정자를 정수(%d)로 해서 출력하면 위와 같은 결과가 나옵니다.

2. While + Break

Break문은 반복문에서만 사용 할 수 있는 구문으로, 반복문을 중단하고 프로그램의 프로세스를 일종의 Main 구문으로 빠져나가게 하는 구문입니다. 프로그램이 짧은 경우에는 상관이 별로 없지만, 프로그램이 길어지는 경우에, 특정 경우 특정 반복문을 실행하고, 아닌 경우 빠져나와야 할 경우에 자주 사용 됩니다. 다음의 예시를 살펴 보겠습니다.

while A<10: in_text = input("-m: 숫자세기, -q:종료") if in_text == "-q": break elif in_text =="-m": A = A+1 A

 

 

-m: 숫자세기 -q:종료 m

-m: 숫자세기 -q:종료 q

이 코드를 한 번에 이해하셨다면 이 포스팅을 보실 이유도 별로 없으시겠지만, 일단 line by line으로 좀 해석을 하면, 아직 설명하지 않았지만 input이라는 변수에 사용자가 문자나 숫자를 입력을 할 수 있습니다. 그래서 이것을 in_text라는 변수에 집어 넣었는데, 이것이 만약에 -q이면 break 구문을 써서 반복문을 빠져나가서 A를 출력합니다. 그러면 A에 아무것도 들어 있지 않으므로 당연히 아무것도 출력되지 않을 것입니다. 반면에 -m을 집어 넣으면 A에 +1 을 하도록 설정합니다.

 

Code가 조금 복잡해지긴 했지만, 맨 처음의 코드보다 훨씬 쓸모가 많을 것 같습니다. 처음의 코드도 응용 여부에 따라 쓸모는 많겠죠. 제가 못 찾은 것일 지도-_-

 

 

3. Continue

 

]:
while A < 10:
    A += 1
    if A == 5:
        continue
    print(A)
1
2
3
4
6
7
8
9
10

 

Continue문은 특정 값일 때 제어를 반복문의 바깥으로 돌려주지 않고 반복문의 맨 처음으로 옮겨 줍니다. 나중에 for문에서도 같이 알아 볼 테니 간단하게만 코딩하고 가도록 하겠습니다. 지금까지 코딩하면서 사실 많이 사용하진 않았으니까요. 머리가 나쁘면 몸이 고생한다고 그냥 노가다(?)로 해결이 가능한 부분인 것 같기도 합니다. -_-

 

 

 

 

'머신러닝 > 기초 문법' 카테고리의 다른 글

9. 함수  (0) 2019.02.12
8. FOR문  (0) 2019.02.11
6. IF 문  (0) 2019.02.09
주피터 노트북 블로그에 맞기 정렬하기  (0) 2019.02.08
넘파이 기초 - 배열 생성(1)  (0) 2019.01.31

 이제 파이썬에서 자료형을 보았으니 그렇게 본 자료형들을 어떻게 처리 할지, 프로그램을 제어해야 할 것 같습니다. 따라서, 프로그램의 제어문에 대해서 보도록 하겠습니다. 즉 처리를 하는데, A 가 무엇무엇하면 B를 하고 아니면 C를 한다, A를 몇 번 실행한다. 이런 것을 학습하도록 하는데, 맨 처음에 학습하는 IF문은 말 그대로, IF 즉 조건문입니다. 


IF는 대표적으로 IF, 그리고 If - Else, IF-Elif-Else 마지막으로 중복 IF문으로 나눠 볼 수 있는데, 단독 IF문의 사용은 If-Elif의 사용에서 충분히 알 수 있으므로 이번에는 If-Elif-(Else), 그리고 중복 If문에 대해서만 살펴 보도록 하겠습니다. 


1. If - Elif - Else 문. 


If - Elif - Else문

먼저 If문을 실행해서 조건을 살펴 본 다음에, 조건이 맞으면 If문의 조건 밑의 코드를 실행합니다. 그리고 나머지는 무시하고 실행하지 않는다. 

If 조건:

Code


Elif 조건:

Code


Else: 

Code


주) If1 - If2 - If3 의 코드 일 경우에는 If문1의 조건을 보고 조건이 맞으면 코드를 실행하고, If문2의 조건을 보고 조건이 맞으면 코드를 실행하고, If문3의 조건을 보고 조건이 맞으면 코드를 실행하고.....를 반복한다. 처음에 대체 If - Elif와 If - If의 차이가 뭔지 궁금했는데 제대로 알려 주는 곳이 없어서 적어 둡니다 

그 다음에 Elif의 조건을 보고 만약에 조건이 맞다면 코드를 실행하다고 그렇지 않다면 Else문을 실행합니다. Else문은 존재하지 않고, Elif로 끝나도 되지만 Elif로 해결되지 못하는 나머지 모든 조건에 코드를 실행해야 할 경우에 사용합니다. 그렇지 않을 경우, 여러 개의 Elif문을 사용해야 합니다. 코드가 좀 길어 지겠지만 Elif를 쓰는 게 확실하긴 하겠죠. 참고로 Elif는 Else - if의 준말로 우리 말로는 그렇지 않으면 입니다. 다른 언어에서는 Elseif입니다. 



대표적인 성적 예시를 살펴 보겠습니다. 

1. If - Elif (- Else)

import random


score = 90
attendance = 'great'

if score >= 90 and attendance =='great':
    print("your score is A+")
elif score >= 90 and attendance !='great':
    print("your score is A-")
elif score >= 80 and attendance =='great':
    print("your score is B+")
else:
    print("your score is C")

your score is A+


위는 Score와 Attendance로 성적을 판별하는 간단한 프로그램입니다.

설명과 함께 간단하게 코드를 알아 보겠습니다. If의 조건문: Score >=90 그리고(and) 출석 great || If의 코드: A+를 출력하고, Elif1의 조건문 Score>=90 그리고(and) 출석이 great가 아님(!=) || Elif1의 코드: A-를 출력 Elif2의 조건문 Score>=80 그리고(and) 출석이 great || Elif1의 코드: B를 출력 Else C를 출력


이는 중복 If 를 이용해서도 비슷하게 구현 될 수 있는데 자세한 코드를 보면 다음과 같습니다. 


2. 중복 If

if score >= 90:
    grade = 'A'
    if attendance =="great":
        grade_plus = grade + '+'
else:
    grade__plus = 'B'
grade_plus
Out[12]:
'A+'

간단하게 If - elif로 구현 할 수 있는 걸 굳이 중복 if문으로 구현 했으니 변수가 늘어나고 그런 걸 볼 수 있지만 지금은 그런 것보다, 중복 if문을 이해하는데 의의를 두면

좋을 것 같습니다. 간단한 코드지만 line by line으로 해석을 해보면, 


if1 조건: 위애서 정의한 score가 90이상 || if1의 코드: if 실행 새로운 변수 grade에 A대입한 뒤, 다시 if2문 실행(중복 if문)

if2 조건: 위에서 정의한 attendance가 great || if2의 코드: grade_plus라는 변수 정의 한 후, grade 변수에 character형 '+' 추가

else: grade_plus에 B대입 


grade_plus 출력


if문에 대해서 간단하게 알아 보았으니 다음에는 제어문 중에서 반복문의 기초가 되는 While문에 대해서 알아보도록 하겠습니다. While문도 프로그래밍 상 여러모로 쓸모가 많은 구문이기 때문에 숙지하시기 바랍니다. 저도 포스팅 하면서 여러모로 배우는 점이 많네요 ㅎㅎ



import numpy as np import random 
In [18]:
list_data1 = [1,2,3,4] 
In [22]:
list_data1 
Out[22]:
[1, 2, 3, 4]

list를 ndarray로 변환하는 간단한 메서드를 생성합니다.

In [20]:
nd_list_data1 = np.array(list_data1) #array - 순차형 데이터를 ndarray로 변환 
In [21]:
nd_list_data1 
Out[21]:
array([1, 2, 3, 4])

기존에 python 리스트는 그냥 []로 나왔지만 ndarray의 경우 array[]로 나왔습니다.

In [24]:
nd_list_data1.ndim #1차원인 경우 열을 먼저 출력해 줌...? 
Out[24]:
1

차원을 출력하는 메서드는 .ndim이고

In [25]:
nd_list_data1.shape 
Out[25]:
(4,)

 

ndarray의 형태를 출력하는 방법은 .shape입니다. 자주 사용하고 직관적이기 때문에

외워 두시면 좋을 것 같습니다. 참고로 list에는 없는 메서드이기 때문에 참고해 두시면 좋을 것 같습니다.

In [27]:
nd_list_data1.dtype 
Out[27]:
dtype('int64')
In [29]:
zero = np.zeros(2) 
In [30]:
zero 
Out[30]:
array([0., 0.])
In [46]:
zero = np.zeros((3,6)) #내용을 0으로 채워서 ndarray 생성 
In [47]:
zero 
Out[47]:
array([[0., 0., 0., 0., 0., 0.],        [0., 0., 0., 0., 0., 0.],        [0., 0., 0., 0., 0., 0.]])

zeros()는 0으로 초기화된 ndarray를 생성합니다.

In [48]:
zero.shape 
Out[48]:
(3, 6)
In [49]:
np.empty((2,3,2)) #초기화되지 않고 채워진 배열을 반환 
Out[49]:
array([[[6.73898103e+149, 5.30276956e+180],         [3.31033942e-033, 6.97532527e-076],         [4.46234816e-086, 3.36010587e-143]],         [[6.01433264e+175, 6.93885958e+218],         [5.56218858e+180, 3.94356143e+180],         [5.64124820e-038, 9.96020951e-047]]])

empty(층, 행, 열) 메서드는 아무 값이나 랜덤으로 채운 채뤄 배열을 반환.

In [50]:
np.eye(3,3) #희박 행렬 생성.  
Out[50]:
array([[1., 0., 0.],        [0., 1., 0.],        [0., 0., 1.]])

eye는 희박 행렬을 생성하는데, 선형대수에서 많이 사용하는데 저는 선형 대수를 하지 않지만

선형 대수를 하시는 분은 eye 메서드를 그냥 외워 두시면 좋을 것 같습니다.

In [51]:
np.arange(5) #파이썬의 range와 유사. ndarray를 반환.  
Out[51]:
array([0, 1, 2, 3, 4])
In [ ]:
 

                              arange는 range랑 비슷하게, 0 ~ n 까지의 숫자를 생성하기 때문에 초기화를 할 때 잘 쓰는 함수입니다. 

   또는 그래프를 그릴 때 index를 사용 할 수 있겠죠.   

'머신러닝 > 기초 문법' 카테고리의 다른 글

6. IF 문  (0) 2019.02.09
주피터 노트북 블로그에 맞기 정렬하기  (0) 2019.02.08
넘파이 기초 - 색인과 슬라이싱 기초(2)  (1) 2019.01.31
5. 딕셔너리 심화 - (2)  (0) 2019.01.30
5. 딕셔너리 기초 - (1)  (0) 2019.01.29

 저번에 Dictionary를 생성하고 삭제하는 간단한 방법에 대해서 공부했다면 오늘은 저번에 이어 딕셔너리의 좀 더 복잡한 사용법에 대해서 공부해 보도록 하겠습니다. 저번에 딕셔너리는 {key: value} 가 맵핑되어 있는 집합이자 딕셔너리의 키 값은 Immtable하고, 값은 Mutable하다고 했습니다. 그런데 여기서 Key가 중복되면 에러를 출력해 줄까요? 불행하게도 그렇지 않습니다. 에러를 출력해 주면 내가 뭘 잘못했는지 알고 수정 할 텐데, 그렇지 않습니다. 그냥 값을 출력해 줍니다. 즉, 다음과 같습니다.

 

 

위와 같이 마지막 값만 출력해 줍니다. 이것은 파이썬이 잘못된 언어가 아니라, value가 변할 수 있는 값이기 때문에 마지막 값으로 덮어 씌워지는 것입니다. 딕셔너리 기초에서 봤는데, 딕셔너리는 왜 index로 접근 할 수 없었을까요? index가 존재하지 않고 대신에 key라는 변하지 않는 참조 가능한 값이 있기 때문입니다.

 

 

dictionary를 선언하는 방법은 list 처럼 하되, dictionary가 대괄호로 들러쌓여 있으므로 = { } 처럼 선언해 줍니다. 아니면 딕셔너리 Constructor로도 생성이 가능한데 주의 할 점은 dictionary constructor를 사용할 떄는 대괄호가 아닌 소괄호로 둘러 쌓아 줘야 하고, key에 ' '을 사용하면 안 된다는 점입니다. 사용은 다음과 같이 하면 됩니다.

 

 

리스트 속에 다음과 같이 [ [key, value] ] 키와 value값이 나란히 있으면, dict() 메서드를 통해 dictionary로 변환이 가능합니다.

 

 

딕셔너리에서 키:값 쌍을 여러 개를 만들 고 싶을 경우,

 

 

 

하나의 리스트에 모두다 쓰면 dict 에러가 납니다.

a=[ ['a',1], ['b',1] ] 처럼 나눠써야 에러가 나지 않고 정상적으로 출력이 됩니다. 이러한 점 알아 두시기 바랍니다.

 

딕셔너리를 print하고 싶을 경우, 보통, print 하는 것처럼 형식 지정자를 사용할 필요 없이 바로 print함수 안에 dictionary이름을 적으면 됩니다. print함수가 아니면 pprint 모듈을 import해서 dictionary를 출력할 수도 있습니다.

 

 

오늘은 딕셔너리를 좀 더 자세히 알아 봤습니다만, 충분하지는 않을 것으로 생각됩니다. 저도 충분히 공부했다고 생각되지 않으니까요 ㅎㅎ;;

관련해서 사용하는 것은 pandas와 numpy를 공부할 때 같이 배우도록 하겠습니다.

 

그럼 오늘은 이만 마치도록 하겠습니다.

 

참고자료: https://wikidocs.net/16043

이번엔 파이썬의 특수한 자료형인 딕셔너리 자료형을 학습하도록 하겠습니다. 해당 자료형은 저도 잘 사용하지 않는 관계로 자세하게 공부하면서 포스팅을 해야 하겠습니다. 제가 딕셔너리 자료형을 소홀히 한 이유는 다른 언어에서는 배열만 존재하고 해당 배열이 파이썬 언어에서는 리스트로 사용되기 때문에 딕셔너리 자료형은 자주 사용되지 않거니 하고 생각해기 때문입니다. 하지만 생각보다 자주 사용되더군요. 따라서 생성부터 자세하게 알아보도록 하겠습니다.

 

출처: https://wikidocs.net/16 

(점프 투 파이썬)

 

1. 딕셔너리 자료형의 생성

 

기본적으로 딕셔너리 자료형은 Index로 이루어져 있지 않고 key : value 이렇게 사전처럼 이루어져 있으므로 생성 할 때도, key값과 value값을 모두 생성 해 줘야 합니다. DB를 배우신 분은 아시겠지만 KEY값은 일반적으로 유일한 값이어야 한다는 것을 아실 것입니다. 그리고 파이썬의 딕셔너리에서도 유일한 값으로 사용합니다. 그러면 코딩을 해서 생성 해보록 하겠습니다.

 

 

 dic이라는 dictionary에 zipcode와 phone을 'key'와 value쌍으로 추가 했습니다. 그런데 여기에 이름이 빠진 것 같아서 'name'과 그에 해당하는 값을 추가 해 줬습니다. 추가하는 방법은 dictionary 이름['key 이름'] = value 입니다. 이렇게 해 줬더니. 값이 정상적으로 들어 간 것을 확인 할 수가 있습니다. 그런데 핸드폰이 dictionary에서 필요가 없어졌다고 합니다. 그러면 삭제를 해 줘야 하는데 이건 del명령어를 사용해줘야 합니다. 즉, del dictionary이름['key이름'] 이렇게 지우면 됩니다. 그러면 정상적으로 phone 값이 사라진 것을 볼 수 있습니다.

 

 기존에 인덱스로 자료에 접근하던 프로그래머들에게는 매우 생소한 자료형이긴 하지만 처음 프로그래밍 하는 사람들에게는 오히려 이게 편리 할 수도 있을 것 같긴 합니다. 프로그래밍 시에는 리스트나 Ndarray가 더 많이 쓰이긴 하지만요. (딕셔너리도 의외로 쓰이긴 합니다. 무시해서는 큰 코 다칩니다. 저처럼요)

 

 그럼 다음으로 넘어가서. 딕셔너리를 활용하는 방법에 대해서 알아 보도록 하겠습니다. 실제로는 판다스 DataFrame안에 넣어서 사용하거나 하지만 저처럼 기초를 모르면 흔들리기 때문에 기초부터 자세히 짚고 넘어가도록 하겠습니다.

 

 

 

 dictionary에 접근하는 방법은 dictionary이름['key'] 입니다. 추가하는 방법과 비슷합니다. 따라서 나중에 공부하도록 하겠지만 pandas나 numpy에서 한 열이나 행을 출력하거나 할 때도 딕셔너리를 이렇게 사용 할 수 있겠네요. 하지만 For문으로 i+를 통해서 index를 증가 시키면서 점진적으로 출력시키는 데에는 어려움이 있을 것 같습니다. 그래서 list를 사용합니다. dictionary의 key이름이 [1] [2]....이렇게 index처럼 구분 될 수 있으면 반복 문이 사용 될 수도 있겠네요. 어쨌든, 그건 추후의 일이고.

 

 앞에서도 언급했는데, 딕셔너리를 만들 때 주의해야 할 사항은 첫째로  key는 반드시 유일해야 한다는 것입니다. 그렇지 않으면 하나를 제외한 나머지 값들이 무시되어 버리는 현상이 발생해 버립니다. 그리고 key는 불변해야 한다는 것 입니다.

 

 

2. 딕셔너리 관련 기초 함수

 

 

딕셔너리를 자유롭게 다루기 위해서는 관련 개념을 아는 것 뿐만 아니라, 동작하는 함수들도 알고 있어야만 합니다. 물론 필요 할 시에 참조해도 됩니다. 그냥 이런 기능이 있었지~하고 알고 있으면 됩니다.

 

 

 

 dictionary.keys() 라는 함수가 있습니다. 그러면 이 함수는 dictionary의 key만을 모아서 dict_key라는 객체를 리턴합니다. 주의 할 것은 여기서 이것은 리스트처럼 보이지만, 리스트가 아니라는 점입니다. 파이썬 2.x, 정확히는 2.7까지는 dict_key는 list를 리턴했지만 3.0이후에는 list가 아닌 단순한 객체로서 리턴 되었습니다.

 

 

 

 

dictionary.keys()가 출력하는 것이 list였다면 list()안에 들어가서 list가 만들어 질리가 없겠죠? 그런데 list가 만들어 졌습니다.

 

 뿐만 아니라 리스트 함수인 append를 사용 할 수 없다는 에러 메세지가 출력이 됩니다. 이러한 정황들로 봐서, dictionary.keys()가 출력하는 것은 리스트가 아닌 단순한 객체를 출력하는 것으로 볼 수 있습니다.

 

dictionary.keys()와 비슷하게 dictionary의 value값을 얻고 싶다면 dictionary.values()함수를 사용하면 됩니다. 이것도 싫다. 나는 key랑 value 쌍으로 얻고 싶다. 하면 dictionaly.items()함수를 사용하시면 됩니다. 사용은 다음과 같이 하시면 됩니다. 생각보다 매우 간단합니다.

 

 

 

각각 dictionary.values()는 dict_values객체를 그리고 dictionary.items()는 dict_items객체를 리턴 하는 것을 볼 수 있습니다. 뿐만 아니라 dictionary자료형은 list처럼 clear()함수를 통해 dictionaryd의 key : value 쌍을 지우는 것을 지원 합니다. dictionary.clear() 이렇게 사용하면 되겠습니다.

 

 딕셔너리 자료형은 저도 잘 모르는 관계로 공부하면서 포스팅 하고 있습니다. 그래서 기초와 심화로 나누어서 포스팅 할 것입니다. 이번에 dictionary를 잘 공부해두면 저도 좋고 이걸 보시는 분들도 좋을 것 같아서 말이죠 ㅎㅎ

 

 

 

'머신러닝 > 기초 문법' 카테고리의 다른 글

넘파이 기초 - 색인과 슬라이싱 기초(2)  (1) 2019.01.31
5. 딕셔너리 심화 - (2)  (0) 2019.01.30
4. 리스트와 관련 메서드  (0) 2019.01.28
3. String -(2) : string 함수  (0) 2019.01.24
3. String - (1)  (0) 2019.01.22

+ Recent posts