본문 바로가기
Boostcamp AI Tech/[week 1-5] LEVEL 1

[Week 1 - Day 2] Python 3,4,5

by newnu 2021. 8. 3.
반응형

1. 강의 내용

3-1. Python Data Structure

 

- 스택과 큐

   스택 : 나중에 넣은 데이터를 먼저 반환하도록 설계된 메모리 구조 (LIFO)

               리스트, collections.deque() 사용

    큐 :  먼저 넣은 데이터를 먼저 반환하도록 설계된 메모리 구조

             리스트 - append(),get(), pop(0)

 

- 튜플과 집합

     tuple : 값의 변경이 불가능한 리스트 

                  연산,인덱싱, 슬라이싱 가능

                   프로그램을 작동하는 동안 변경되지 않는 데이터의 저장 (학번, 이름 등)

                    (1) 하나만 넣으면 정수로 인식

     집합(set) : 값을 순서없이 저장, 중복 없이

                           intersection()교집합, difference()차집합

 

- 사전 (dict): key값(데이터를 구분 지을 수 있는 고유한 값)-value값 함께 저장

                          {key:value}

 

- collections 모듈 : list,tuple,dict 에 대한 python built-in 확장 자료구조 모듈

     Deque : 큐와 스택을 지원( 리스트에 비해 효율적 )

                     rotate, reverse 등 linked list의 특성 지원

                      popleft, extend, extendleft

     OrderedDict : 순서 보장

     defaultdict : dict type의 값에 기본 값 지정, 신규값 생성시 사용

     Counter : Sequence type 의 data element 들의 갯수를 dict 형태로 반환

                          Set의 연산 지원 

     namedtuple :  Tuple 형태로 Data 구조체 저장하는 방법 

                                  저장되는 data의 Variable을 사전에 지정해서 저장

 

from collections import namedtuple
Point = namedtuple('Point', ['x','y'])
p = Point(11,y=22)
print(p[0]+p[1]) # (11,22)

x,y = p
print(x,y) # 11 22
print(p.x+p.y) # 33
print(Point(x=11,y=22)) # Point(x=11,y=22)

 

3-2. Pythonic Code

 

파이썬 스타일의 코딩 기법

- split & join

    split : string type 의 값을 기준값으로 나눠서 List 형태로 반환

    join : string 으로 구성된 List를 합쳐 하나의 string으로 반환

 

- list comprehension

    기존 list를 사용하여 간단히 다른 list를 만드는 기법

    for append 보다 속도가 빠름

    ex) [ i for i in range(10)]

 

- enumerate & zip

    enumerate : list의 element를 추출할 때 번호를 붙여서 추출

    zip : 두 개의 list의 값을 병렬적으로 추출함

 

- lambda & map & reduce ( 직관성이 떨어짐 )

    lambda : 함수 이름 없이 함수처럼 쓸 수 있는 익명함수

    map : 두 개 이상의 list에도 적용 가능, if filter도 사용 가능

    reduce : list에 똑같은 함수를 적용해서 통합

from functools import reduce
print(reduce (lambda x,y : x+y, [1,2,3,4,5]))
# 15

- iterable object

     sequence형 자료형에서 데이터를 순서대로 추출하는 object

cities = ["Seoul","Busan","Jeju"]

iter_obj = iter(cities)

print(next(iter_obj))
print(next(iter_obj))
print(next(iter_obj))
print(next(iter_obj))

 

- generator

    iterable object를 특수한 형태로 사용해주는 함수

    element가 사용되는 시점에 값을 메모리에 반환

    : yield를 사용해 한번에 하나의 element만 반환함

def generator_list(value):
	result=[]
    for i in range(value):
    	yield i

    

    list comprehension과 유사한 형태로 generator 형태의 list 생성

gen_ex = (n*n for n in range(500))

 

- function passing arguments

    함수에 입력되는 arguments의 다양한 형태

     1) Keyword arguments

           함수에 입력되는 parameter의 변수명을 사용, arguments를 넘김

     2) Default arguments

           parameter의 기본값을 사용, 입력하지 않을 경우 기본값 출력

     3) Variable-length arguments

           가변인자 : 개수가 정해지지 않은 변수를 함수의 Parameter로 사용 , 맨 마지막 parameter에 사용 가능

           Asterisk(*) 기호를 사용하여 함수의 parameter를 표시함 (*args)

           입력된 값은 tuple type로 사용 가능

 

4-1. Python Object - Oriented Programming

 

객체지향 프로그래밍

객체 : 실생활에서 일종의 물건

         속성(변수)과 행동(함수)

 

클래스와 실제 구현체 인스턴스

 

 - Attribute 추가

     def __init__(self,...)

 - method 구현

     def chage_back_number(self,new_number):

     반드시 self 추가해야만 class 함수로 인정

 

상속 : 부모클래스로부터 속성과 Method를 물려받은 자식 클래스를 생성하는것

다형성(Polymorphism) : 같은 이름 메소드의 내부 로직을 다르게 작성

가시성 ( Visibility ) : 객체의 정보를 볼 수 있는 레벨 조절

    캡슐화 (Encapsulation) : 클래스는 설계할 때, 클래스 간 간섭, 정보공유의 최소화

 

4-2. Module and Project

 

모듈 : 작은 프로그램 조각들

         모듈들을 모아서 하나의 큰 프로그램 개발

          모듈화 시키면 다른 프로그램이 사용하기 쉬움

          .py 파일을 저장한 후 import 문을 사용해서 호출

 

          Built-in Modules : 파이썬이 기본 제공하는 라이브러리 (random, time,.....)

 

패키지 : 모듈을 모아놓은 단위, 하나의 프로그램

             다양한 오픈 소스들이 모두 패키지로 관리됨

             각 폴더별로 모듈 관리

 

5-1. Exception / File / Log Handling

 

Exception :

 - 예상 가능한 예외 - 사전에 인지할 수 있는 예외, 사용자의 잘못된 입력, 파일 호출시 파일 없음, 개발자가 반드시 명시적으로 정의

 - 예상 불가능한 예외 - 인터프리터 과정에서 발생하는 예외, 개발자 실수 

 

Built-in Exception : 기본적으로 제공하는 예외

 - IndexError : List의 Index 범위를 넘어갈 때

 - NameError : 존재하지 않은 변수를 호출할 때

 - ZeroDivisionError : 0으로 숫자를 나눌 때

 - ValueError : 변환할 수 없는 문자/숫자를 변환할 때

 - FileNotFoundError : 존재하지 않는 파일을 호출할 때

 

예외 처리 ( Exception Handling)

 - try ~ except ~ else 문법

try : 
	예외 발생 가능 코드
except <Exception Type>: 
	예외 발생시 대응하는 코드
else : 
	예외가 발생하지 않을 때 동작하는 코드

- try ~ except ~ finally

try : 
	예외 발생 가능 코드
except <Exception Type>: 
	예외 발생시 대응하는 코드
finally :
	예외 발생 여부와 상관없이 실행

 

- raise <Exception Type> 

    필요에 따라 강제로 Exception 발생

 

File Handling

 - 파일 시스템 : OS에서 파일을 저장하는 트리구조 저장 체계

 - 디렉토리 : 폴더 또는 디렉토리 - 파일과 다른 디렉토리 포함 가능

 - 파일 :  컴퓨터에서 정보를 저장하는 논리적인 단위

f = open("<파일이름>", "접근모드(r,w,a)")
f.close()

r - 읽기모드, w - 쓰기 모드, a - 추가모드

 

f.read() : 파일의 내용을 문자열로 변환

f.readlines() : 파일을 한줄씩 읽어 list로 반환

f.readline(): 실행할때마다 한줄씩 읽어오기

 

f.write(data) : 파일 쓰기

 

Logging

 프로그램이 실행되는 동안 일어나는 정보기록 남기기

import logging

logging.debug("틀렸어")
logging.info("확인")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

 

logging level : debug > info > warning > error > critical

 

configparser : 프로그램의 실행 설정을 file에 저장 (Dict)

argparser : console창에서 프로그램 실행시 setting 정보 저장

 

5-2. Python data handling

CSV,  WEB(HTML), XML, JSON

 

CSV (Comma Seperate Value)

 - 필드를 쉼표로 구분한 텍스트 파일

 - 엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터 형식

 

Web

 - 데이터 표시하기 위해 HTML 형식 사용

HTML(Hyprt Text Markup Language)

 - 웹 상의 정보를 구조적으로 표현하기 위한 언어

 - 제목, 단락, 링크 등 요소 표시를 위해 <Tag> 사용

 - 트리 모양의 포함관계

 - 정규식으로 추출 용이

 

XML(eXtensible Markup Language)

 - 데이터의 구조와 의미를 설명하는 TAG를 사용하여 표시하는 언어

 - Tag 와 Tag 사이에 값이 표시되고, 구조적인 정보를 표현할 수 있음

 - 컴퓨터간에 정보를 주고받기 유용한 저장 방식

 

JSON (JavaScript Object Notation)

 - 웹언어인 JavaScript의 데이터 객체 표현 방식

 - 간결성으로 기계 인간이 모두 이해하기 편함

 - 데이터 용량이 적고 코드로 전환이 쉬움

 - XML의 대체

 - json 모듈을 사용하여 쉽게 파싱 가능

 - dict type 과 상호호환

2. Peer Session

  1. AI Boost camp
  • Python Basics for AI ~5강
  • AI Math ~4강
  1. 알고리즘 스터디
  • 백준 1141, 1051 문제 코드 리뷰
반응형