Python 자료구조 간략히 보기
파이썬 자료구조 정리
- 평소에 자세히 알지 못했던 부분만 부분적으로 정리함
실수형
a= 5.
a= -.9
-> 5.0
-> -0.7
위와 같이 .을 붙이면 파이썬에서 알아서 실수형으로 전환해줌
지수 표현 방식
- 파이썬에서 e나 E를 이용한 지수 표현 방식을 이용 할 수 있다.
- e나 E 다음에 오는 수는 10의 지수부를 뜻
- 1e9 는 10의 9제곱 -> 1,000,000,000
- 최단 경로 알고리즘에서 도달할 수 없는 노드에 대해 최단 거리를 무한(INF) 로 설정된다.
a = 1e9 -> 1000000000.0
b = 75.25e1 -> 752.5 (75.25 x 10)
c = 3954e-3 -> 3.954 (3954 x 0.001)
- 10진수 체계에서는 0.3 과 0.6을 더한 값이 0.9로 나온다
- 컴퓨터 2진수에서는 0.9가 정확히 표현이 안된다.
- 최대한 가깝게 표시하지만 오차가 있다
a = 0.3 + 0.9
if a == 0.9:
print(True)
else:
print(False)
-> False가 나옴
-> 0.899999999 이런식으로 나옴
round() 함수를 이용해서 처리하기
수 자료형의 연산
- 파이썬은 나누기 연산이 실수형으로 반환
- 그래서 몫의 값만 필요할 때는 // 로 사용해주면 됨
- 자바에서는 그냥 몫만 나옴
리스트 컴프리핸션
- 리스트 컴프리헨션은 2차원 리스트를 초기화할 때 효과적으로 사용될 수 있다.
- 특히 N X M 크기의 2차원 리스트를 한 번에 초기화 해야 할 때 유용하다.
- 좋은 예시 :
array = [[0] * m for _ in range(n)]
- 좋은 예시 :
- 만약 2차원 리스트를 초기화할 때 다음과 같이 작성하면 예기치 않은 결과가 나올 수 있다.
- 잘못된 예시 :
array = [[0] * m] * n]
- 위 코드는 전체 리스트 안에 포함된 각 리스트가 모두 같은 객체로 인식된다.
- 잘못된 예시 :
좋은 예시
- 이렇게 작성할 경우 특정한 위치의 값을 변경할 때 정상적으로 변경이 됨
나쁜 예시
- 해당 코드로 변경하면 빨간색 점이 있는 위치의 데이터만 바뀌여야하지만 전체가 바뀌게 된다.
리스트 관련 기타 메서드
튜플 자료형
- 튜플 자료형은 리스트와 유사하지만 다음과 같은 문법적 차이가 있다.
- 튜플은 한 번 선언된 값을 변경할 수 없다.
- 리스트는 [] 사용하지만 튜플은 ()를 이용한다.
- 튜플은 리스트에 비해 상대적으로 공간 효율적이다.
튜플을 사용하면 좋은 경우
- 서로 다른 성질의 데이터를 묶어서 관리할 때
- 최단 경로 알고리즘에서는 (비용, 노드번호)의 형태로 튜플 자료형을 자주 이용한다.
- 데이터의 나열을 해싱(Hashing)의 키 값으로 사용해야 할 때
- 튜플은 변경이 불가능하므로 리스트와 다르게 키 값으로 사용될 수 있다.
- 리스트보다 메모리를 효율적으로 사용해야 할 때
사전 자료형
- 사전 자료형은 Key 와 Value 의 쌍을 데이터로 가지는 자료형
- 앞서 다루었던 리스트와 튜플의 값을을 순차적으로 저장하는 것과는 대비됨
- 사전 자료형은 키와 값의 쌍을 데이터로 가지며, 원하는 ‘변경 불가능한 자료형’을 키로 사용할 수 있다.
- 파이썬의 사전 자료형은 해시 테이블(Hash Table)을 이용하므로 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다.
- 초기화는 dict(), {}
집합 자료형
- 집합은 다음과 같은 특징이 있다.
- 중복을 허용하지 않는다.
- 순서가 없다.
- 집합은 리스트 혹은 문자열을 이용해서 초기화할 수 있따.
- 이때 set() 함수를 이용한다.
- 혹은 중괄호 ({}) 안에 각 원소를 , 를 기준으로 구분해서 삽입함으로써 초기화 할 수 있다.
- 데이터의 조회 및 수정에 있어서 O(1) 의 시간에 처리할 수 있다.
# 집합 자료형 초기화 방법 1
data = set([1,1,2,3,4,4,5])
-> {1,2,3,4,5}
data = {1,1,2,3,4,4,5}
-> {1,2,3,4,5}
- 위와 같이 중복이 존재하지 않는다.
집합 자료형의 연산
a = set([1,2,3,4,5])
b = set([3,4,5,6,7])
# 합집합
print(a|b)
-> {1,2,3,4,5,6,7}
# 교집합
print(a&b)
-> {3,4,5}
# 차집합
print(a-b)
-> {1,2}
집합 자료형 관련 함수
data = set([1,2,3])
# 새로운 원소 추가
data.add(4)
print(data)
-> {1,2,3,4}
# 새로운 원소 여러 개 추가
data.update([5,6])
print(data)
-> {1,2,3,4,5,6}
# 특정한 값을 갖는 원소 삭제
data.remove(3)
print(data)
-> {1,2,4,5,6}
사전 자료형과 집합 자료형의 특징
- 리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있따.
- 사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.
- 사전의 키(key) 혹은 집합의 원소 (element)를 이용해 O(1) 의 시간 복잡도로 조회한다.
자주 사용되는 표준 입력 방법
- input() 함수는 한 줄의 문자열을 입력 받는 함수
- map() 함수는 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용
- 예시) 공백을 기준으로 구분된 데이터를 입력 받을 떄는 다음과 같이 사용
- list(map(int, input().split()))
- 예시) 공백을 기준으로 구분된 데이터의 개수가 많지 않다면, 다음과 같이 단순히 사용
- a,b,c = map(int, input().split())
- 예시) 공백을 기준으로 구분된 데이터를 입력 받을 떄는 다음과 같이 사용
빠르게 입력 받기
- 사용자로부터 입력을 최대한 빠르게 받아야 하는 경우
- sys 라이브러리에 정의되어 있는 sys.stdin.readline() 메서드 이용
- 단 입력 후 엔터가 줄 바꿈 기호로 입력되므로 rstrip() 메서드를 함께 사용
자주 사용되는 표준 출력 방법
- 파이썬에서 기본 출력은 print() 함수를 이용한다.
- 각 변수를 콤마 , 를 이용하여 띄어쓰기로 구분하여 출력할 수 있따.
- print() 는 기본적으로 출력 이후에 줄 바꿈을 수행한다.
- 줄 바꿈을 원치 않는 경우 end 속성을 이용할 수 있다.
list 연산자
- 리스트, 튜플, 문자열, 딕셔너리 모두에서 사용 가능
in 연산자와 not in 연산자 | 설명 |
---|---|
x in 리스트 | 리스트 안에 x가 들어가 있을 때 참 True 다. |
X not in 문자열 | 문자열 안에 x가 들어가 있지 않을 때 True 다. |
조건문 간소화
파이썬 continue
전역변수 & 지역변수
a = 10
def func():
global a
a += 1
print(a)
func()
-> 11
------------------------------
a = 10
def func():
a += 1
print(a)
func()
-> 오류남func() 내부에서 a 가 선언안되어 있음
------------------------
a = 10
def func():
print(a)
func()
-> 10
단순히 참조는 오류가 안남
-------------------------
array = [1,2,3,4,5]
def func():
array.append(6)
print(a)
func()
-> [1,2,3,4,5,6]
----------------------
array = [1,2,3,4,5]
def func():
array = [3,4,5]
array.append(6)
print(a)
func()
print(array)
-> [3,4,5,6]
-> [1,2,3,4,5]
여러 개의 반환 값
람다 표현식
실전에서 유용한 표준 라이브러리
- itertools : 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들을 제공
- 특히 순열과 조합 라이브러리는 코딩 테스트에서 자주 사용됨
- heapq : 힙(heap) 자료구조를 제공
- 일반적으로 우선순위 큐 기능을 구현하기 위해 사용
- bisect : 이진 탐색 (Binary Search) 기능을 제공
- collections : 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함
- math : 필수적인 수학적 기능을 제공
- 펙토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(pi)와 같은 상수를 포함
순열과 조합
카운터 Counter
최대 공약수와 최소 공배수
출처: https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC
댓글남기기