파이썬 기초3

ganta·2021년 1월 20일
0

파이썬 기초

목록 보기
3/9
post-thumbnail
post-custom-banner

저번 포스팅에 이어서 파이썬 기초 이론에 대하여 정리 해 보았습니다.

파이썬의 자료구조


  • 파이썬의 자료 구조 종류

    • 스택과 큐(stack)
    • 큐(queue)
    • 튜플(tuple)
    • 집합(set)
    • 사전(dictionary)
    • collection 모듈의 사용
  • 스택(Stack)

    • 나중에 넣은 데이터를 먼저 꺼내는 메모리 구조
    • Last In First Out(FIFO)
    • push와 pop기능으로 이루워져 있음
    • 파이썬에서는 list가 stack 기능을 지원하고 있음
  • 큐(Queue)

    • 나중에 넣은 데이터를 나중에 꺼내는 메모리 구조
    • First In First Out(FIFO)
    • 파이썬에서는 list가 queue 기능을 지원하고 있음
  • 우선순위 큐(Priority Queue)

    • 데이터를 추가는 어떤 순서대로 해도 상관없으나 제거될 떄는 가장 작은 값을 제거하는 독특한 특성을 지닌 자료구조 <내부적으로 데이터를 정렬된 상태로 복관하는 메커니즘 존재>

    • 우선순위 큐를 구현한 모듈은 queue내장 모듈과 heapq모듈을 이용하여서도 사용을 할 수 있다.

    • queue 모듈 사용

    • heapq 모듈 사용

  • 튜플(Tuple)

    • 내부의 데이터가 수정이 불가능한 리스트
    • "()"기호로 표시
    • 인덱싱, 연산, 슬라이싱등의 기능 사용 가능
    • 값을 수정할 수 없기 때문에 연산 기능을 사용하면 결과물이 새로운 튜플로 생겨서 반환이됨(id값 참고)
    • (주의) 단일값 선언시 (1)의 경우 int형, (1,)의 경우 튜플의 형태로 반환이 됨
  • 집합(Set)

    • 값을 순서없이 저장, 중복을 허용하지 않는 자료형
    • "{}" 혹은 set()을 이용하여 선언
    • 다양한 메소드의 지원과 수학에서 사용하는 다양한 연산 기능을 지원

  • 사전(Dictionary)

    • 데이터 저장 할 때, 구분할 수 있는 데이터를 함께 저장
    • key값과 value값으로 이뤄짐
    • 다양한 메소드 중 item()<key, value 값을 튜플 형태로 반환>, keys()<키값들을 반환>, values()<데이터값들을 반환>을 사용하여 다양한 로직들 처리가 가능

Collections 모듈


  • 파이썬의 리스트, 튜플, 사전(딕셔너리)에 대한 Python Built-in 확장 자료 구조(모듈)이다.

  • 편의성과 실행 효율 측면에서 기존 자료구조보다 뛰어남

  • deque

    • Stack과 Queue를 지원
    • 양 옆으로 데이터를 넣고 빼기가 가능
    • 파이썬 리스트보다 효율적인 저장 방식을 지원
    • 내부적으로 Linked List로 구현이 되어 있어 기존 list 함수를 모두 지원
    • 큐의 경우 queue 내장 모듈을 지원하나 deque보다 속도가 느림(queue 모듈은 thread등을 잘 처리하기 위해 동기화 과정을 거치기 때문에 속도가 느림)

  • orderedDict

    • 데이터를 입력한 순서대로 반환값을 반환
    • python 3.6부터 일반적인 dict자료형도 같은 기능을 함
  • defaultdict

    • 딕셔너리에 해당 키 값이 없으면 선언하고 사용 시 값이 default값으로 설정이 되고 사용이 가능하도록 해 줌
    • 기존 딕셔너리 사용 보다 훨씬 간결한 코드 생성이 가능

<추가적인 팁>
딕셔너리 정렬을 할 시 items()로 key와 value를 튜플 형태의 리스트로 받아 온다음 정렬을 함

  • Counter
    • 연속적인 형태의 데이터들의 갯수를 딕셔너리 형태로 반환
    • 생성자 선언 시 파라미터 형태는 딕셔너리 타입 혹은 keyword 파라미터 형태 둘 다 가능
    • 수학에서 사용하는 다양한 연산 기능을 지원


Pythonic Code


  • 파이썬 특유의 문법을 활용하여 효율적인 코드를 작성

  • 현재는 많은 언어들이 서로의 장점을 채용하여 사용하는 추세

  • split & join

    • split : 문자열을 특정한 문자 혹은 공백문자를 기준으로 나눔
    • join : 리스트의 원소들을 특정한 문자를 기준으로 이어서 붙힘
  • List Comprehension

    • 다른 리스트를 이용한 새로운 리스트를 만듬
    • for + append방식을 이용한 것 보다 속도가 빠름
    • if, else를 이용한 필터링 기능


  • enumerate & zip

    • enumerate : iterable한 객체의 원소들을 돌면서 번호를 붙혀서 추출
    • zip : 두개 이상의 iterable한 객체의 값을 각 원소의 순서에 맞게 묶어 병렬적으로 추출
  • lambda & map & reduce

    • lambda : 익명함수(함수 이름이 없어도 함수처럼 쓸 수 있음), PEP8 에서는 lambda의 사용을 권장하지는 않음
    • map : iterable한 객체를 돌면서 새로운 값을 가지는 iterable한 객체를 생성(map객체, iterable한 객체로 형 변환 가능)
    • reduce : iterable한 객체의 원소들을 하나의 값으로 반환(ex - 누적 합에 대한 결과등)
  • Iterable Object

    • 리스트, 튜플같은 iterable한 객체는 원소마다 다음 원소의 메모리 주소를 가지고 있지 않으나 iterable객체는 해당 값과 다음 원소의 메모리 주소값을 가지고 있음
    • 데이터를 순서대로 추출하는 객체
    • 내부적 구현으로 __iter__ 와 __next__가 사용이 됨
    • 파이썬 리스트의 메모리 저장 방식은 리스트의 들어가는 값을 저장하는 것이 아니라 값이 있는 메모리의 주소를 저장한다.
  • Generator

    • generator는 iterator를 생성해주는 함수
    • 각각의 원소가 사용되는 시점에 값을 메모리에 반환
    • 메모리에 한꺼번에 올려서 쓰는 것이 아닌 불를 때마다 값을 던져줌
    • 권장사항(대용량의 데이터를 사용 시 메모리 절약)
    • generator를 생성하는 generator comprehension 존재


  • Function Passing Argument

    • keyword args : 함수에 입력되는 파라미터의 변수명을 사용, argument를 넘김

    • default args : 입력하지 않을 경우 기본값 출력

    • variable-length args
      1, 개수가 정해지지 않은 변수를 함수의 파라미터로 사용
      2, Asterisk()기호를 사용
      3, 인자로 받아온 후 tuple 타입으로 사용 가능
      4, 일반 가변인자일 시 "
      "를 사용하고 키워드 가변인자일 시 (**)를 사용
      5, 일반 가변인자와 키워드 가변인자를 사용 할 시 파라미터 입력의 순서 맞춰서 넣어야 한다.


<추가사항>

  • 파라미터에 Asterisk(*)기호를 사용하면 unpacking이 일어나 값이 전달된다.(iterable 객체의 원소들이 각각 전달됨)

  • zip사용시 리스트에 있는 iterable 객체들을 병렬적으로 처리 하고 싶을 때 유용하게 사용된다.

Reference

Naver BoostCamp AI Tech - edwith 강의
https://m.blog.naver.com/PostView.nhn?blogId=acornedu&logNo=220934409189&proxyReferer=https:%2F%2Fwww.google.com%2F
https://www.acmicpc.net/board/view/49166
https://www.daleseo.com/python-priority-queue/
https://wikidocs.net/16069
https://www.daleseo.com/python-heapq/
https://bearwoong.tistory.com/85

profile
한걸음씩 꾸준히
post-custom-banner

2개의 댓글

comment-user-thumbnail
2021년 1월 20일

현재 링크 때문에 스팸 필터가 오작동하고 있는데
스팸이 아닌 포스트에 스팸 필터가 작동하면 제가 수동으로 처리하고 있으니 계속 재작성하지 않으셔도 돼요 :)
알고리즘은 조금 더 손을 보도록 할게요.

이 댓글을 보셔야 할텐데 -

1개의 답글