부스트캠프 AI Tech 1기 [T1209 최보미]/U stage

Day3 학습정리 - 파이썬 기초 문법 II

B1001101 2021. 1. 20. 23:54

강의 복습

1. Python Data Structure

더보기

1) 스택과 큐(stack & queue with list)

  • 스택(Stack)
    • 나중에 넣은 데이터를 먼저 반환하도록 설계된 메모리 구조 → Last In First Out(LIFO)
    • 데이터 입력: Push, 출력: Pop
    • 리스트를 사용하여 스택 구조 구현 가능
    • push: append(), pop: pop()
  • 큐(Queue)
    • 먼저 넣은 데이터를 먼저 반환하도록 설계된 데이터 구조 → First In First Out(FIFO)
    • Stack과 반대되는 개념
    • 리스트를 사용하여 큐 구조 활용
    • put: append(), get: pop(0)

2) 튜플과 집합(tuple & set)

  • 튜플(tuple)
    • 값의 변경이 불가능한 리스트
    • 선언 시 []가 아닌 () 사용
    • 리스트의 연산, 인덱싱, 슬라이싱 등 동일하게 사용
    • 프로그램을 작동하는 동안 변경되지 않은 데이터 저장
    • 함수의 반환값 등 사용자의 실수에 의한 에러 사전에 방지
  • 집합(set)
    • 값을 순서없이 저장, 중복 불허하는 자료형
    • set 객체 선언을 이용하여 객체 생성
    • 수학에서 활용하는 다양한 집합연산 가능
    • 합집합: s1.union(s2) 또는 s1 | s2
    • 교집합: s1.intersection(s2) 또는 s1 & s2
    • 차집합: s1.difference(s2) 또는 s1 - s2

3) 사전(dictionary)

  • 데이터를 저장할 때 구분지을 수 있는 값을 함께 저장
  • 구분을 위한 데이터 고유 값: Identifier 또는 Key
  • Key 값을 활용하여 데이터 값(Value)를 관리함
  • key와 value를 매칭하여 key로 value를 검색
  • 다른 언어에서는 Hash Table이라는 용어를 사용
  • {Key1:Value1, Key2:Value2, Key3:Value3 ...} 형태

4) Collection 모듈

  • List, Tuple, Dict에 대한 Python Built-in 확장 자료 구조(모듈)
  • 편의성, 실행 효율 등을 사용자에게 제공
  • deque, Counter, OrderedDict, defaultdict, namedtuple 등의 모듈 존재
  • deque
    • Stack과 Queue를 지원하는 모듈
    • List에 비해 효율적인(빠른) 자료 저장 방식 지원
    • rotate, reverse 등 Linked List의 특성 지원
    • 기존 list 형태의 함수 모두 지원
    • 기존 list보다 효율적인 자료구조 제공
    • 효율적 메모리 구조로 처리 속도 향상
  • OrderedDict
    • Dict와 달리 데이터를 입력한 순서대로 dict 반환(3.6부터는 입력한 순서 보장하여 출력)
    • Dict type의 값을 value 또는 key 값으로 정렬할 때 사용 가능
  • defaultdict
    • Dict type의 값에 기본 값을 지정, 신규값 생성시 사용하는 방법
    • 하나의 지문에 각 단어들이 몇 개나 있는지 세고 싶을 경우
    • Text-mining 접근법 - Vector Space Model
  • Counter
    • Sequence type의 data element들의 갯수를 dict 형태로 반환
    • Dict type, keyword parameter 등도 모두 처리 가능
    • Set의 연산들을 지원
    • word counter의 기능도 손쉽게 제공
  • namedtuple
    • Tuple 형태로 Data 구조체를 저장하는 방법
    • 저장되는 data의 variable을 사전에 지정해서 저장

2. Pythonic code

더보기

0) Overview

  • 파이썬 스타일의 코딩 기법
  • 파이썬 특유의 문법을 활용하여 효율적으로 코드 표현
  • 많은 언어들이 서로의 장점을 채용하여 더 이상 파이썬 특유는 아님
  • 고급 코드를 작성할수록 더 많이 필요해짐
  • Why Pythonic Code?
    • 코드에 대한 이해도: 많은 개발자들이 Python 스타일로 코딩함
    • 효율: 코드의 길이와 실행시간이 짧아짐
    • 코드 잘 짜는 것처럼 보임

1) split & join

  • split: string type의 값을 기준값으로 나눠서 List 형태로 반환
  • join: String으로 구성된 list를 합쳐 하나의 string으로 반환

2) list comprehension

  • 기존 List를 사용하여 간단히 다른 List를 만드는 기법
  • 포괄적인 List, 포함되는 리스트라는 의미로 사용됨
  • 파이썬에서 가장 많이 사용되는 기법 중 하나
  • 일반적으로 for + append보다 속도 빠름

3) enumerate & zip

  • enumerate: list의 element를 추출할 때 번호를 붙여서 추출
  • zip: 두 개의 list의 값을 병렬적으로 추출함

4) lambda is & map & reduce

  • lambda(λ): 함수 이름 없이 함수처럼 쓸 수 있는 익명함수
    • 수학의 람다 대수에서 유래
    • Python 3부터는 권장하지는 않으나 여전히 많이 쓰임
    • 문제점: 어려운 문법, 테스트의 어려움, 문서화 docstring 지원 미비, 코드 해석의 어려움, 이름이 존재하지 않는 함수의 출현 등
  • map
    • 두 개 이상의 list에도 적용 가능, if filter도 사용 가능
    • python3는 iteration을 생성 → list를 붙여줘야 list 사용 가능
    • 실행시점의 값을 생성, 메모리 효율적
  • reduce
    • map function과 달리 list에 똑같은 함수를 적용해서 통합
  • Summary
    • lambda, map, reduce는 간단한 코드로 다양한 기능 제공
    • 그러나 코드의 직관성이 떨어져서 python3에서는 lambda나 reduce 사용을 권장하지 않음
    • legacy library나 다양한 머신러닝 코드에서 여전히 사용중

5) iterable object

  • sequence형 자료형에서 데이터를 순서대로 추출하는 object
  • 내부적 구현으로 __iter__와 __next__가 사용됨
  • iter()와 next() 함수로 iterable 객체를 iterator object로 사용

6) generator

  • iterable object를 특수한 형태로 사용해주는 함수
  • element가 사용되는 시점에 값을 메모리에 반환: yield를 사용해 한번에 하나의 element만 반환함
  • generator comprehension (generator expression)
    • list comprehension과 유사한 형태로 generator형태의 list 생성
    • [] 대신 ()를 사용하여 표현
  • 일반적인 iterator는 generator에 반해 훨씬 큰 메모리 용량 사용
  • list 타입의 데이터를 반환해주는 함수는 generator로 만들 것
  • 큰 데이터를 처리할 때는 generator expression 고려할 것
  • 파일 데이터를 처리할 때에도 generator 쓸 것

 

7) asterisk

  • 함수에 입력되는 arguments의 다양한 형태
    • Keyword arguments: 함수에 입력되는 parameter의 변수명을 사용하여 arguments 넘김
    • Default arguments: parameter의 기본 값 사용, 입력하지 않을 경우 기본값 출력
    • Variable-length arguments
  • 가변인자(variable-length)
    • 개수가 정해지지 않은 변수를 함수의 parameter로 사용
    • Keyword arguments와 함께 argument 추가 가능
    • Asterisk(*) 기호를 사용하여 함수의 parameter 표시
    • 입력된 값은 tuple type으로 사용할 수 있음
    • 가변인자는 오직 한 개만 맨 마지막 parameter 위치에 사용 가능
    • 일반적으로 *args를 변수명으로 사용
    • 기존 parameter 이후에 나오는 값을 tuple로 저장
  • 키워드 가변인자(Keyword variable-length)
    • Parameter 이름을 따로 지정하지 않고 입력
    • Asterisk(*) 두개를 사용하여 함수의 parameter 표시
    • 가변인자는 오직 한 개만 기존 가변인자 다음에 사용
  • Asterisk (*)
    • 단순 곱셈, 제곱연산, 가변 인자 활용 등 다양하게 사용됨
    • tuple, dict 등 자료형에 들어가 있는 값을 unpacking하는 데 사용
    • 함수의 입력값, zip 등에 유용하게 사용 가능

피어세션

오늘 피어세션에서는 각자 조사한 것을 발표하는 시간을 가졌다. 아직 처음이라서 예상보다 많이 길어졌지만 유익한 시간이었다. 내가 조사한 주제는 파이썬의 unittest 모듈이다. 원래 발표를 잘 못하는데다가 줌으로 발표하는 건 처음이라서 걱정했는데 다행히 팀원들의 반응이 좋았다. 주제 선정을 잘 한 것 같다.

unittest.pdf
1.28MB


코멘트

오늘 수업은 자료구조와 pythonic code에 대한 내용이었다. 내 코드는 효율성이나 pythonic이랑은 거리가 먼데 오늘 수업 내용을 잘 익혀서 더 좋은 코드를 쓸 수 있도록 해야겠다.