욤미의 개발일지
[DAY 1] Python: Lecture 0 - Lecture 3 본문
728x90
반응형
[Lecture 0] Python Overview
파이썬 언어의 특징
- 플랫폼 독립적 인터프리터 언어
- 완전 객체 지향 언어
- 동적 타이핑 언어
[Lecture 1] Environment
- 파이썬 환경설정
- wsl 설치, oh-my-zsh 사용
- 환경설정 해보기
[Lecture 2] Variable & Operator
파이썬 변수의 특징
- 변수는 값을 저장하는 공간으로 = 연산자로 대입 가능
- 모든 변수는 메모리 주소를 가리킨다. (즉, 포인터)
- 선언한 변수에 특정 공간이 생기는 개념X
- 필요하면 공간을 만들고 변수명을 붙인다.변수명은 일종의 이름표
변수명
- 알파벳, 숫자, 언더스코어(_) 사용
- 숫자로 변수명 시작 X
- 변수의 특징이 살아있도록 정의
- 대소문자 구분함
- for, if, else, True 같은 예약어는 사용X
- C와 달리 대입 연산이 반환값을 가지는 것은 아님
- 연속해서 대입 가능(C와 같이 뒤에서 부터 대입)
a = b = 2
- Python 3.9 이상은
:=
연산으로 대입과 동시에 반환 가능(a := 2) == 2
→ True
원시 자료형: 가장 기본이 되는 자료형
- int: 정수
- overflow가 발생하지 않는다.
- 명시적인 short type등이 없음
- float: 실수
- 부동 소수점, double precision(32bit)
- e로 제곱표현, 3e4 = 3 x 10⁴
- 0 생략가능, .08 or 9.
- complex: 복소수, 실수부(i)와 허수부(j)로 표현
- string: 문자열
- 따옴표(큰 따옴표, 작은 따옴표 차이 X)로 표현
- Unicode로 표현
- bool: 논리, 참(True)/거짓(False)
- None: 일종의 null
연산자 | 비고 |
---|---|
+ | 덧셈 |
- | 뺄셈 |
* | 곱셈 |
** | 거듭 제곱 |
/ | 나누기 |
// | 몫 |
% | 나머지 |
비트 연산자 | 비고 |
---|---|
~ | 비트 부정 |
| | 비트 합 |
& | 비트곱 |
^ | 배타적 비트합 |
>>, << | 비트 시프트 |
연산자 특징
- In-place 연산
a += 1
- 기존 객체를 수정 시도하고, 불가능할 시 새로운 객체 생성
- Out-place 연산
a = a + 1
- 명시적으로 새로운 객체 생성
- ++ 연산은 파이썬에 X
원시자료형들은 불변 타입(Immutable Type)이다.
- 파이썬의 모든 것은 객체이기 때문에 원시자료형들도 객체이다.
- 불변타입들은 저장된 값이 변하지 않는다.
- 모든 타입은 물리적 메모리 주소를 가리킴
- 원시자료형과 튜플을 제외한 다른 거의 대부분의 파이썬 객체는 가변 타입(Mutable Type), int는 불변타입, list는 가변타입
- 파이썬에서 대입은 원칙적으로 메모리 주소를 복사한다.
- 값을 복사하지 않고 같은 주소를 공유하는 것
- 불변형의 경우 수정이 필요한 경우에는 새로운 객체를 생성
Dynamic Typing: 코드 실행 지점에서 데이터 타입을 결정
Implicit Type Conversion
- bool → int → float → complex
- None, str는 별개
- int간 나누기는 float, 정수 나누기는 //
Explicit Type Conversion
- 명시적 형 변환
Type(value)
: int(a) float(text) str(value)- 실수 → 정수: 소수점 버림(0으로 가까워짐)
round()
: 반올림 내장 함수bool(a)
: 빈 문자열, 0, [], {}, None = False / [1, 3, 2] =True
Type Checking
type(variable)
: 변수의 타입 확인 가능isinstance(variable, type)
: 변수가 지정 타입인지 확인
[Lecture 3] Data Structure
List(배열)
- 일련의 데이터를 하나로 묶음
- 대괄호로 선언
- 아무 타입이나 넣기 가능
- 길이가 정해져 있지 않음
- 요소는 객체들에 대한 메모리 주소를 가지고 있음
- 리스트 안에 다른 모든 객체 넣기 가능
- 가변 타입, 동적배열로 구현됨(길이가 dynamic)
a = [1, 2, 3, 4, 5] # 가변 타입
b = a # 같은 주소를 가리킴
a += [6] # in-place 연산, a = a + [6]과 다름
b # [1, 2, 3, 4, 5, 6]
a = 'something' # 불변 타입, 문자열도 일종의 리스트
b = a # 같은 주소를 가리킴
a += '?' # 불변타입이므로 out-place 연산, a = a + '?'
b # 'something'
a # 'something?'
seq[index]
로 요소 하나 접근- 인덱스는 0부터 시작
- 음수는 뒤에서 부터 접근
seq[start: end: step]
로 리스트 슬라이싱, end는 포함X
List Operators
a = [1, 2, 3, 4]
b = [5, 6, 7 ,8]
a + b # [1, 2, 3, 4, 5, 6, 7, 8]
a[0] = 'something?'
a * 2 # ['something?', 2, 3, 4, 'something?', 2, 3, 4]
'something?' in a # True
'''리스트 길이 내장함수'''
seq = [1, 2, None, True]
len(seq) # 4
'''리스트 맨 뒤에 요소 추가 메소드'''
seq.append('something')
'''리스트 맨 뒤에 리스트 추가'''
seq.extend([5, 6]) # inplace, seq += [5, 6]
'''원하는 곳에 삽입'''
seq.insert(1, 1.5)# 1번째에 1.5 삽입 (index, value)
seq # [1, 1.5, 2, None, True, 'something', 5, 6]
'''요소 삭제, 예약어'''
del seq[1] # 1번째 요소 삭제
'''원하는 값 삭제'''
seq.remove('something')
seq # [1, 2, None, True, 5, 6]
파이썬에서 제공되는 기능
- 예약어
- 일종의 문법적인 요소
- 괄호 사용X
- 재정의 불가능
- True, False, None, and, if, del, import, continue ...
- 내장함수
- 기본 정의된 함수
- 괄호 사용
- 별개의 함수 사용
- 재정의 가능
- 편의성 향상
- General Class
- len( ), sum( ), range( ), min( ), max( ) ...
- 메소드
- 객체 내에 정의된 함수
- .method( )로 접근
- Overriding
- 해당 객체를 다룸
- 특정 Class
- .append( ), .insert( ), .extend( ) ...
리스트 연산의 시간 복잡도
Operation | Example | Big-O | Notes |
---|---|---|---|
index | arr[i] | O(1) | |
stroe | arr[i] = 0 | O(1) | |
length | len(arr) | O(1) | |
append | arr.append(3) | O(1) | |
pop | arr.pop() | O(1) | arr.pop(-1)과 동일 |
clear | arr.clear() | O(1) | arr = [] 과 유사 |
slice | arr[a:b] | O(b-a) | arr[:] = O(N) |
extend | arr.extend([...]) | O(len(...)) | 확장 길이에 따라 |
construction | list(a, b, c) | O(len(...)) | 요소 길이에 따라 |
check ==/!= | O(N) | 비교 | |
insert | arr.insert(i, v) | O(N) | i 위치에 v를 삽입 |
delete | del arr[3] | O(N) | |
remove | arr.remove(3) | O(N) | |
containment | a in/not in arr | O(N) | 검색 |
copy | arr.copy() | O(N) | arr[:]과 동일 |
pop | arr.pop(i) | O(N) | arr.pop(0) = O(N) |
extreme value | min(arr)/max(arr) | O(N) | 최솟값/최댓값 검색 |
reverse | arr.reverse() | O(N) | 반대로 |
iteration | for i in arr | O(N) | |
sort | arr.sort() | O(NlogN) | |
multiply | k*arr | O(kN) |
튜플(Tuple)
- 불변 타입 리스트(Immutable List)
- ( )를 사용해서 선언
- 문맥에 따라 괄호 생략가능
t = 1, 2, 3, 4
- 리스트의 연상, 인덱싱, 슬라이싱 동일하게 사용
- 일반적으로 함수에서 2개 이상 요소를 반환할 때 사용
- 튜플은 불변 타입이지만 튜플안에 요소는 가변 타입일 수도 있다
- 요소가 하나인 튜플선언 =
(1, )
- 그냥 괄호
(1)
는 산술연산자 이다.
- 그냥 괄호
- 문자열 타입(str)의 경우 일종의 문자 tuple로 생각 가능
- indexing, slicing가능
Packing & Unpacking
- Packing: 여러 데이터 묶기
- _는 관습적으로 사용하지 않는 변수에 사용
- Unpacking: 묶인 데이터 풀기
- (Asterisk)로 남는 요소를 리스트로 남기기 가능
딕셔너리(Dictionary)
- Hash로 구현
key: value
로 일종의 매핑을 위한 데이터 구조- key는 중복이 불가능하며 hashable(불변 타입)이어야 한다. 튜플도 가능
- value는 아무 객체나 가능
- { }로 선언
dic = {}
ordic = dict()
: 빈 딕셔너리 생성dic[key] = value
: 요소 삽입dic[key]
: 인덱싱del dic[key]
: 요소 삭제dic.items()
: 모든 key와 value를 일종의 튜플 리스트로 반환dic.keys()
: 모든 key를 일종의 리스트로 반환dic.values()
: 모든 value를 일종의 리스트로 반환a in dic.values()
: 딕셔너리의 value안에 a가 있는지 검사
딕셔너리 연산의 시간 복잡도
- Hash로 구현되어 indexing속도가 O(1)
집합(Set)
- 딕셔너리의 key만 모인 형태
s = set(...)
: set 선언s.add(3)
: 요소 추가, 중복된 요소는 추가하지 않음s.remove(2)
: 요소 삭제, 존재하지 않는 요소는 에러 발생s.discard(33)
: 요소 삭제, 존재하지 않을 경우 무시s.update([1, 3, 33, None])
: 여러 요소 추가, 중복 무시s.clear()
: set 비우기
Operation | Example | Big-O |
---|---|---|
index | dic[k] | O(1) |
store | dic[k] = v | O(1) |
lenght | len(dic) | O(1) |
delete | del dic[k] | O(1) |
clear | dic.clear() | O(1) |
construction | dict() | O(N) |
iteration | for i in dic | O(N) |
연산자 | 비고 |
---|---|
교집합 | & |
합집합 | | |
차집합 | - |
배타적 합집합 | ^ |
728x90
반응형
'NLP > STUDY' 카테고리의 다른 글
[DAY 4] Python: Lecture 10. String (0) | 2022.11.02 |
---|---|
[DAY 4] Python: Lecture 9. Advanced Data Structure (0) | 2022.10.21 |
[DAY 3] Python: Lecture 8. Module & Package (0) | 2022.10.18 |
[DAY 3] Python: Lecture 7. Object-Oriented Programming (1) | 2022.10.18 |
[DAY 2] Python: Lecture 4 - Lecture 6 (1) | 2022.10.14 |
Comments