대학원 일기

파이썬 기초 문법 II 본문

Computer programming/python

파이썬 기초 문법 II

대학원생(노예) 2022. 1. 11. 01:17

파이썬 기초 문법

Python Data Structure, Collection

스택과 큐(stack & queue with list)

 

리스트(list)

- 선언 시 "[]"를 사용

- 중복이 있고, 순서도 있음. ([1, 2, 3, 3, 2, 1] → [1, 2, 3, 4, 2, 1], Unhashable type)

- 데이터를 추가할 때, append()를 사용함

- 데이터를 삭제할 때, remove()와 pop()을 사용함. (리스트에서 pop()은 맨 뒤 요소를 삭제함)

- 배열의 인덱스 요소를 추가할 때는 insert(인덱스 번호, 값)을 사용한다.

- 배열의 인덱스 요소를 삭제할 때는 del 이름[인덱스 번호]를 사용한다.

 

스택(stack)

- 나중에 넣은 데이터를 먼저 반환하도록 설계된 메모리 구조

- Last In First Out(LIFO, 선입후출)

- Data의 입력을 Push, 출력을 Pop이라고 함

stack 예시

- 리스트(List)를 사용하여 스택 구조를 구현함

- push를 append() 함수, pop을 pop()함수를 사용함

 

큐(Queue)

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

- First In First Out(FIFO, 선입선출)

- Stack 메모리 구조와 반대되는 개념

- 파이썬은 리스트를 사용하여 큐 구조를 활용

- put(Enqueue)을 append() 함수로, get(Dequeue)을 pop(0) 함수로 사용함

 

튜플(tuple)

- 값의 변경이 불가능한 리스트(할당을 못함)

- 선언시 "()" 를 사용

- 리스트의 연산, 인덱싱, 슬라이싱 등을 동일하게 사용

- 튜플은 중복이 있고, 순서도 있다. ((1, 2, 3, 3, 2, 1) → (1, 2, 3, 3, 2, 1), Hashable type)

 

집합(set)

- 값을 순서없이 저장, 중복 불허하는 자료형

- 선언시 "{}" 를 사용

- 중복이 없고, 순서도 없음. ({1, 2, 3, 3, 2, 1} → {1, 2, 3}, Unhashable type)

- set 객체 선언을 이용하여 객체 생성

- set에서 데이터를 추가할 때 add()를 사용

- set에서 데이터를 삭제할 때 remove()를 사용

- set에서 여러 데이터 요소를 추가할 때 update([값1, 값2])를 사용

- set에서 특정한 한 요소를 삭제할 때 discard()를 사용

- set에서 모든 요소를 삭제할 때 clear()를 사용

- set은 list와 다르게 pop()을 사용하면 맨 앞 요소부터 삭제됨

- set은 요소로 Hashable type만 가질 수 있음(tuple이 해당)

집합의 연산

- 수학에서 활용하는 다양한 집합연산 가능

- s1.union(s2)을 통해 합집합 연산 가능 (s1 | s2도 가능)

- s1.intersection(s2)를 통해 교집합 연산 가능 (s1 & s2도 가능)

- s1.difference(s2)로 차집합 연산 가능(s1 - s2로도 가능)

 

사전(Dictionary, Map)

- 데이터를 저장할 때는 구분 지을 수 있는 값을 함께 저장함

- key 값(고유한 값)을 활용하여, 데이터 값(Value)를 관리함(key-value 코딩이라고 함) 

- key 값에는 Hashable type만 가능하고, value에는 Unhashable type이 가능하다

 

Collections

- List, Tuple, Dict에 대한 Python Built-in 확장 자료 구조(모듈)

- 편의성, 실행 효율 등을 사용자에게 제공함

- 아래의 모듈이 존재함

 

Deque

- Stack과  Queue를 지원하는 모듈

- List에 비해 효율적인(빠른) 자료 저장 방식을 지원함

- rotate, reverse 등 Linked List의 특성을 지원함

- 기존 list 형태의 함수를 모두 지원함

 

OrderedDict(OrderedList)

 

- Dict와 달리, 데이터를 입력한 순서대로 dict를 반환함

- 그러나 dict도 python 3.6부터 입력한 순서를 보장하여 출력함(지금은 dict에서도 되서 굳이 알 필요x)

 

defaultdict

- Dict type의 값에 기본 값을 지정, 신규 값 생성시 사용하는 방법

defaultdict가 안된 경우
default 값으로 설정

 

Counter

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

- Dict type, keyword parameter 등도 모두 처리 가능

- set 연산을 지원함

 

namedtuple

- Tuple 형태로 Data 구조체를 저장하는 방법

- 저장되는 data의 variable을 사전에 지정해서 저장함

 

Pythonic code

- 파이썬 스타일의 코딩 기법

- 파이썬 특유의 문법을 활용하여 효율적으로 코드를 표현함

- 그러나 더 이상 파이썬 특유는 아님, 많은 언어들이 서로의 장점을 채용

- 고급 코드를 작성할 수록 더 많이 필요해짐

Split & Join

 

Split 함수

- string type의 값을 "기준값"으로 나눠서 List 형태로 변환

- split() 함수를 사용하여 문자열에 있는 공백을 통해 문자열을 단어별로 자를 수 있다

ex1) split 함수
ex2) split 함수

 

Join 함수

- Split 함수와 반대되는 개념으로 Split 함수가 자른다는 개념이면 join은 서로 붙이는 개념

 

List comprehension(중요)

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

- 포괄적인 List, 포함되는 리스트라는 의미로 사용됨

- 파이썬에서 가장 많이 사용되는 기법 중 하나

- 일반적으로 for + append 보다 속도가 빠름

result = [i for i in range(10) if i % 2 ==0] 같이 밑줄그은 곳을 condition(조건)이라고 한다.

이중 for문을 List comprehension 했을 때
if not(i==j) 조건인 필터를 추가
Two dimentional list 표현
Two dimetional vs One dimentional

 

enumerate & zip

enumerate

- list의 element를 추출할 때 인덱스 번호를 붙여서 추출

zip

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

 

lambda & map & reduce

lambda

- 함수 이름 없이, 함수처럼 쓸 수 있는 익명함수

- 수학의 람다 대수에서 유래함

- Python3부터 잘 권장하지 않으나 상당히 많이 씀

 

map function

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

- sequence형 데이터가 있을 때, 함수를 만들어줘서 하나씩 매핑(mapping)해주는 것

 

reduce function

- map function과 달리 list에 똑같은 함수를 적용해서 통합함

 

iterable object

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

- 내부적 구현으로 ___iter__와 __next__ 가 사용됨

- iter() 와 next() 함수로 iterable 객체를 iterator object로 사용

 

generator

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

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

:  yiled를 사용해 한 번에 하나의 element만 반환함 → 메모리 절약

 

generator comprehension

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

- generator expression 이라는 이름으로도 부름

- [] 대신 ()를 사용하여 표현

- generator를 사용하여 메모리를 절약할 수 있음

 

function passing arguments

 

Keyword argument

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

Default argument

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

 

Variable-length asterisk

 

가변인자(variable-length)

- 개수가 정해지지 않은 변수를 함수의 parameter로 사용하는 법

- Keyword argument와 함께, argument 추가 가능

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

- 입력된 값은 tuple type으로 사용할 수 있음

- 가변인자는 오직 한 개만 맨 마지막 parameter 위치에 사용가능

 

- 가변인자는 일반적으로 *args를 변수명으로 사용

- 기존 parameter 이후에 나오지 않는 값을 tuple로 저장함

 

키워드 가변인자(Keyword variable-length)

- Parameter 이름을 따로 지정하지 않고 입력하는 방법

- asterisk(*) 두개를 사용하여 함수의 parameter를 표시함

- 입력된 값은 dict type으로 사용할 수 있음

- 가변인자는 오직 한 개만 기본 가변인자 다음에 사용

 

asterisk

- 흔히 알고 있는 *를 의미함

- 단순곱셈, 제곱연산, 가변인자 활용 등 다양하게 사용됨

asterisk - unpacking a container

- tuple, dict 등 자료형에 들어가 있는 값을 unpacking

- 함수의 입력값, zip 등에 유용하게 사용가능

 

Comments