※모든 사진과 자료의 출처는 나동빈 [이것이 취업을 위한 코딩 테스트다] 입니다※
수 자료형
정수형
a = 777
a = a + 5
print(a)
특정한 변수의 값을 증가/감소 시키는 것이 가능하다.
실수형
a = 5.
a = -.7
소수부, 정수부 0인 경우, 0인 부분 생략 가능하다.
a = 0.3 + 0.6
(출력: 0.89999999)
컴퓨터 시스템은 실수 정보를 표현하는 정확도에 한계를 가진다.
2진수를 사용하기 때문이다.
a = 0.3 + 0.6
print(round(a, 4))
(출력: 0.9)
round()함수 : round(실수, 반올림하려는 자릿수)
지수 표현 방식
1e9 = 10의 9제곱 = 10억
e나 E 다음에 오는 수는 10의 지수부 이다.
임의의 큰 수를 표현하기 위해 자주 사용된다.
최단 경로 알고리즘 : 도달 못하는 노드에 대하여 최단 거리를 무한(INF)로 설정한다.
-가능한 최댓값이 10억 미만일 때, 무한의 값으로 1e9 이용한다.
#752.5
a = 75.25e1
#3.954
a = 3954e-3
지수는 실수로 표현된다 -> 정수형으로 바꿔주려면 int() 안에 넣는다.
a = int(1e9)
수 자료형의 연산
+ - * /
파이썬은 나눠진 결과를 실수형으로 반환한다.
% : 나머지 연산자
// : 몫 연산자
** : 거듭 제곱 연산자
a ** b (거듭 제곱)
a ** 0.5 (제곱근)
수학 라이브러리 사용 안 해도 기본 제공 연산자로 사용 가능하다.
리스트 자료형
여러 개의 데이터를 연속적으로 처리하기 위해 사용하는 자료형이다.
배열(Array)의 기능 및 연결 리스트와 유사한 기능하다.
테이블이라고도 불린다.
리스트 초기화
a = [1,2,3,4,5,6]
대괄호[ ] 안에 원소를 넣는다.
쉼표로 원소 구분한다.
list( )
[ ]
비어 있는 리스트를 선언한다.
print(a[3])
리스트 원소에 접근할 때 인덱스 값 괄호에 넣는다.
n = 10
a = [0] * n
(출력 : [0,0,0,0,0,0,0,0,0,0] )
크기가 N이고, 모든 값이 0인 1차원 리스트(크기 1인 리스트) 초기화.
a = [1,2,3,4,4]
a[4] = 5
(출력 : [1,2,3,4,5] )
특정 값을 바꿀 때, 특정 인덱스값 접근한다.
리스트의 인덱싱과 슬라이싱
인덱싱 : 인덱스 값을 입력하여 리스트의 특정한 원소에 접근하는 것이다.
파이썬은 양의 정수, 음의 정수 모두 사용 가능하다.
음의 정수 : 거꾸로 탐색한다.
a[-1] : 뒤에서 첫 번째 원소 출력
슬라이싱 : 연속적인 위치를 갖는 원소들을 가져온다.
대괄호 안에 콜론(:) 넣어서 시작 인덱스, 끝 인덱스 설정한다.
끝 인덱스 : 실제 인덱스 보다 1 크게 설정한다.
a = [1,2,3,4,5]
a[1 : 4] : 2번째 원소부터 4번째 원소까지
(출력 : [2,3,4])
리스트 컴프리헨션
리스트 초기화 방법이다.
대괄호 안에 조건문, 반복문 적용하여 리스트 초기화 한다.
간결하고 짧게 작성 가능하다.
#0부터 9까지 수의 리스트
array = [ i for i in range(10) ]
range(10) : i의 값이 0~9까지 매번 증가할 때마다
i의 값을 원소로 적용해서 리스트를 만든다.
만드는 순서
1. a = [ ] : 리스트 만든다
2. a = [ for ] : 반복문 넣는다
3. a = [ for i in range(10) ] : 범위를 정한다, 0~9
4. a = [ i for i in range(10) ] : 그 원소를 리스트로 적용한다
#0부터 19까지 수 중에서 홀수만 포함하는 리스트
array = [ i for i in range(20) if i % 2 ==1 ]
조건문 추가할 수 있다.
#1부터 9까지 수들의 제곱 값을 포함하는 리스트
array = [ i * i for i in range(1, 10) ]
(출력 : [1,4,9,16,25,36,49,64,81] )
리스트 컴프리헨션과 일반적인 코드 비교하기
리스트 컴프리헨션
#0부터 19까지 수 중에서 홀수만 포함하는 리스트
array = [ i for i in range(20) if i % 2 ==1 ]
일반적인 코드
#0부터 19까지 수 중에서 홀수만 포함하는 리스트
array = []
for i in range(20);
if i % 2 == 1;
array.append(i)
2차원 리스트를 초기화할 때 효과적이다.
N X M 크기 2차원 리스트 한번에 초기화
좋은 예시 : array = [ [0] * m for _ in range(n) ]
n번 반복할때마다 길이가 m인 리스트를 초기화 한다.
잘못된 예시 : array = [ [0] * m ] * n
리스트 자료형 이용해서 변숫값을 할당하면 -> 리스트는 객체 형태로 인식 -> 별도의 주소값 가진다.
잘못된 예시처럼하면 단순히 참조값을 복사하는 것과 같다. -> 전체 리스트 안에 리스트가 같은 객체로 인식된다. -> 특정 인덱스의 값 변경하면 전체가 변경된다.
언더바는 언제 사용?
파이썬에서는 반복을 수행하되, 반복을 위한 변수의 값을 무시고자 할 때 언더바 사용한다.
#1부터 9까지 자연수 더하기
summary = 0
for i in range(1, 10);
summary +=i
#"Hello World"를 5번 출력하기
for _ in range(5);
리스트 관련 기타 메서드
함수명 | 사용법 | 설명 | 시간복잡도 |
append() | 변수명.append() | 리스트에 원소 하나 삽입 | O(1) |
sort() | 변수명.sort() | 오름차순 정렬 | O(NlogN) |
변수명.sort(reverse = True) | 내림차순 정렬 | ||
reverse() | 변수명.reverse() | 리스트 원소 순서 뒤집기 | O(N) |
insert() | insert(삽입할 위치 인덱스, 삽입할 값) | 특정 인덱스에 원소 삽입 | O(N) |
count() | 변수명.count(특정값) | 리스트에서 특정 값 가지는 데이터 개수 세기 | O(N) |
remove() | 변수명.remove(특정값) | 특정 값 갖는 원소 제거, 값이 여러개면 하나만 제거 |
O(N) |
a = [1,2,3,4]
a.insert(2, 3)
(출력 : [1,2,3,3,4] )
a.count(3)
(출력 : 2 )
리스트에서 특정값을 가지는 원소 모두 제거
a = [1,2,3,4,5,5,5]
remove_set = {3,5} #집합자료형 : 존재 유무 체크
#remove_set에 포함되지 않은 값만을 저장
result = [ i for i in a if i not in remove_set ]
a라는 리스트를 i라는 원소가 하나씩 확인하면서,
i라는 원소가 remove_set에 포함되지 않는다면,
그 원소만 남겨 놓는다.
=3, 5가 아닌 값들만 남겨서 리스트로 만든다
문자열 자료형
문자열 변수 초기화할 때, 큰따옴표 " 작은 따옴표 ' 모두 이용가능하다.
-전체가 큰따옴표 -> 내부는 작은 따옴표
-전체가 작은 따옴표 -> 내부는 큰따옴표
-백슬래시 \사용하면 원하는 만큼 큰/작은 따옴표 포함 가능
data = "Don't you know \"Python\"?"
문자열 연산
문자열 변수에 덧셈(+)이용하면, 문자열이 더해져서 연결된다.
문자열 변수를 양의정수로 곱(x)하면, 문자열이 여러번 더해진다.
문자열도 인덱싱, 슬라이싱 이용 가능하다.
-문자열은 특정 인덱스의 값 변경 못한다.
a = "Hello"
b = "World"
print( a + " " + b)
(출력 : Hello World ) " "는 공백이다
튜플 자료형
튜플 자료형은 리스트와 유사하지만 문법적 차이가 있다.
-튜플은 한 번 선언된 값을 변경할 수 없다
-튜플은 소괄호 () 이용한다.
튜플은 기능제한적이기에, 공간 효율적이다.
a = (1,2,3,4,5,6,7,8,9)
#4번째 원소 출력
a[3]
#2번째 원소부터 4번째 원소까지
a[1 : 4]
#특정 값 변경
a[2] = 7 --에러--
튜플 사용하면 좋은 경우
서로 다른 성질의 데이터 묶어서 관리할 때
-(학번, 성적), 최단 경로 알고리즘의 (비용, 노드 번호)의 형태로 튜플 자료형 사용한다.
데이의 나열을 해싱(Hashing)의 키 값으로 사용할 때
-튜플은 변경이 불가능하므로 키값으로 사용가능하다. 리스트는 불가능하다.
리스트보다 메모리 효율적으로 사용해야 할 때
사전 자료형
사전 자료형은 키(key)와 값(value)의 쌍을 데이터로 가지는 자료형이다.
-리스트, 튜플이 값을 순차적으로 저장하는 것과 대비된다.
사전 자료형은 원하는 '변경 불가능한(immutable) 자료형'을 키로 사용할 수 있다.
파이썬의 사전 자료형은 해시 테이블(Hash Table)을 이용하므로,
데이터 조회 및 수정에 있어서 O(1)의 시간에 처리 가능하다. = 상수시간, 리스트보다 훨씬 빠르게 조회 가능하다.
#dict() 이용해서 초기화
data = dict()
#특정한 키에 값 할당한다.
data[ '사과' ] = 'Apple' : 대괄호 [ ]안에 key 넣어준다
data[ '바나나' ] = 'Banan'
data[ '코코넛' ] = 'Coconut'
(출력 : {'사과' : 'Apple', '바나나' : 'Banana', '코코넛' : 'Coconut'} )
#한 번에 키에 값을 할당한다, 중괄호 이용한다
a = {
'사과' : 'Apple',
'바나나' : 'Banana',
'코코넛' : 'Coconut'
}
#key를 통해 value값 있는지 확인한다.
if '사과' in data
#특정 key의 value를 찾는다
print( a['사과'] )
(출력 : Apple )
사전 자료형 관련 메서드
키와 값 별도로 뽑아내기 위한 메서드 지원한다.
-키 데이터만 뽑아서 리스트 : keys()함수
-값 데이터만 뽑아서 리스트 : values()함수
#키 데이터만 담은 리스트
key_list = data.keys()
(출력 : dict_keys(['사과', '바나나', '코코넛']) )
key_list = list( data.keys() )
(출력 : ['사과', '바나나', '코코넛'] ) 리스트 형태로 변환해준다
#값 데이터만 담은 리스트
value_list = data.vaules()
(출력 : dict_values(['Apple', 'Banana', 'Coconut']) )
#각 키에 따른 값을 하나씩 출력
for key in key_list; 각각의 key가 key_list를 조회하게 만든다
print( data[key] )
(출력 : Apple Banana Coconut )
집합 자료형
집합 자료형은 중복을 허용하지 않고, 순서가 없다.
집합은 리스트 or 문자열 이용해서 초기화한다.
-이때 set()함수 이용한다.
혹은 중괄호 { } 안에 원소를 콤마 , 로 구분하여 삽입해서 초기화 한다.
데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리 가능하다. = 상수시간, 리스트보다 훨씬 빠르게 조회 가능하다.
#집합 자료형 초기화 방법1
data = set([1,1,2,3,4,4,5])
(출력 : {1,2,3,4,5} ) 중복되는 원소들 제거
#집합 자료형 초기화 방법2 중괄호 사용
data = {1,1,2,3,4,4,5}
집합 자료형의 연산
합집합 : 집합A에 속하거나 집합B에 속하는 원소로 이루어진 집합 =OR
교집합 : 집합A에 속하고 집합B에 속하는 원소로 이루어진 집합 =AND
차집합 : 집합A의 원소 중에서 집합B에 속하지 않는 원소로 이루어진 집합 =MINUS
a = set([1,2,3,4,5])
b = set([3,4,5,6,7])
#합집합
a | b
#교집합
a & b
#차집합
a - b
집합 자료형 관련 함수
data = set([1,2,3])
#새로운 원소 추가
data.add(4)
#새로운 원소 여러개 추가
data.update([5,6])
#특정한 값 갖는 원소 삭제
data.remove(3)
사전 자료형과 집합 자료형의 특징
순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.
-사전의 키, 집합의 원소를 이용해서 O(1)의 시간 복잡도로 조회한다.
-키와 원소의 값은 변경불가능한 문자열, 튜플 사용한다.
'Python' 카테고리의 다른 글
이코테 : DFS/ BFS - 그래프 탐색 알고리즘 (Python) (0) | 2020.11.15 |
---|---|
이코테 : Python 문법 - 5. 실전에서 유용한 표준 라이브러리 (0) | 2020.11.11 |
이코테 : Python 문법 -4. 함수와 람다 표현식 (0) | 2020.11.11 |
이코테 : Python 문법 - 3. 조건문과 반복문 (0) | 2020.11.10 |
이코테 : Python 문법 -2. 입출력 (0) | 2020.11.10 |