자료형
파이썬의 자료형 : 정수형, 실수형, 복소수형, 문자열, 리스트, 튜플, 사전 등.
파이썬은 기본적으로 자료형이 가지고 있는 기능이 다양&강력!!
다른 프로그래밍 언어와 비교했을 때, 자료형만 정확히 이해하고 있어도 매우 다양한 종류의 프로그램을 작성할 수 있음.
파이썬의 리스트 자료형은 C++의 Vector 라이브러리, Java의 array list 라이브러리가 제공하는 기본 기능을 이미 갖고 있음. 별도의 표준 라이브러리를 불러와서 사용하지 않아도 다른 언어의 라이브러리 단에서 제공하는 강력한 기능들을 매우 쉽고 간결하게 이용할 수 있다는 장점이 있음.
코테에서 정수형, 실수형이 가장 많이 사용됨.
수 자료형
정수형(Integer)
양의 정수, 음의 정수, 0
실수형(Real Number)
소수부가 0이거나 정수부가 0인 소수는 0을 생략하고 작성 가능.
a = 5.
print(a)
#Output : 5.0
a = -.7
print(a)
#Output : -0.7
실수형 더 알아보기
오늘날 가장 널리 쓰이는 IEEE754 표준에서는 실수형을 저장하기 위해 4바이트, 혹은 8바이트의 고정된 크기의 메모리를 할당하므로, 컴퓨터 시스템은 실수 정보를 표현하는 정확도에 한계를 가질 수 밖에 없음.
예를 들어서, 10진수 체계에서는 0.3 + 0.6 = 0.9, 로 정확히 떨어짐.
2진수에서는 0.9를 정확히 표현할 방법X.
컴퓨터는 최대한 가깝게 표현하지만, 미세한 오차 발생O.
그래서 권장하는 방법으로는 "round() 함수"를 이용하여 (셋째 자리에서)반올림!!
123.456을 소수 셋째 자리에서 반올림하려면 round(123.456, 2 )
Output : 123.46
a = 0.3 + 0.6
#False
print(a)
if a == 0.9:
print(True)
else:
print(False)
#True
print(round(a, 5))
if round(a, 5) == 0.9:
print(True)
else:
print(False)
지수 표현 방식
실수형으로 처리됨.
a = 9e10
print(a)
#Output : 90000000000.0
그래서, 정수형으로 처리하기 위해서는 a = int(9e10) 와 같이 int로 감싸줘야함.
추가적으로 a = int(9e10)를 권장한다네, 왜? 실수 연산 오차로 인한 오류 예방 가능.
수 자료형의 연산
수 자료형에서는 사칙연산, 나머지 연산자가 많이 사용됨.
단. 나누기 연산자(/)는 결과를 "실수형"으로 반환!! 하므로 꼭 기억.
다양한 로직 설계 시, 나머지 연산자(%)를 이용해야 할 때가 많음.
ex. a가 홀수인지 체크해야하는 경우.
이외에 몫 연산자(//), 거듭 제곱 연산자(**) 등이 있음.
a = 7
b = 3
print(a/b)
#output : 2.3333333333333335
print(a%b)
#output : 1
print(a//b)
#output : 2
print(a**b)
#output : 343
print(a ** 0.5)
#output : 2.6457513110645907
리스트 자료형
여러 데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형.
C or Java에서의 배열(Array)의 기능 및 연결 리스트와 유사한 기능 지원.
C++의 STL vector와 기능적으로 유사.리스트 대신 "배열" 혹은 "테이블"이라고 부르기도 함.
리스트 자료형 초기화
대괄호([]) or list()
쉼표(,)로 원소 구분 및 인덱스(0부터 시작)를 통해서 원소 접근.
#직접 데이터를 넣어 초기화
a = [1, 2, 3, 4, 5, 6, 7]
print(a)
#output : [1, 2, 3, 4, 5, 6, 7]
#네 번째 원소만 출력
print(a[3])
#output : [4]
# 크기가 n이고, 모든 값이 0인 1차원 리스트 초기화
n = 10
a = [0] * n
print(a)
#output : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
리스트의 인덱싱과 슬라이싱
인덱싱(Indexing)이란?
- 리스트의 특정한 원소에 접근하는 것
- 양의 정수, 음의 정수 사용 가능.
- 음의 정수 사용 시, 거꾸로 탐색
a = [1, 2, 3, 4, 5, 6]
print(a[1])
print(a[-1])
a[-5] = -5
print(a)
""" output
2
6
[1, -5, 3, 4, 5, 6]
"""
슬라이싱(Slicing)이란?
- 리스트에서 연속적인 위치를 갖는 원소들을 가져와야할 때 사용.
- 콜론(:)을 넣어서 시작 인덱스와 끝 인덱스를 설정할 수 있음.
- 끝 인덱스는 실제 인덱스보다 1을 더 크게 설정해야함.
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[1:7])
#output : [2, 3, 4, 5, 6, 7]
리스트 컴프리헨션(List Comprehension)
리스트를 초기화 하는 방법 중 하나.
대괄호 안에 조건문과 반복문을 적용하여 리스트를 초기화 구문을 매우 간결하게 할 수 있다.
#0부터 9까지의 수를 포함하는 리스트.
array = [ i for i in range(10)]
print(array)
# output : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#0부터 19까지의 수 중에서 짝수만 포함하는 리스트
array = [ i for i in range(20) if i % 2 == 0]
print(array)
# output : [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
#1부터 9까지의 수들의 제곱 값을 포함하는 리스트
array = [ i * i for i in range(1, 10)]
print(array)
# output : [1, 4, 9, 16, 25, 36, 49, 64, 81]
리스트 컴프리헨션은 2차원 리스트를 초기화 할 때 효과적으로 사용됨.
특히 N x M 크기의 2차원 리스트를 한 번에 초기화 해야 할 때 매우 유용.
- ex. array = [ [0] * m for _ in range(n)
만약 2차원 리스트를 초기화 할 때 다음과 같이 작성하면 예기치 않는 결과 초래..
- ex. array = [ [0] * m ] * n
- 전체 리스트 안에 포함된 각 리스트가 모두 같은 객체로 인식되버림.
# 올바른 방법
n = 4
m = 3
array = [ [0] * m for _ in range(n) ]
print(array)
''' output
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
'''
# 잘못된 방법
# N x M 크기의 2차원 리스트 초기화
n = 4 #행
m = 3 #열
array = [ [0] * m ] * n
print([0] * m)
print(array)
''' output
[0, 0, 0]
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
'''
array[1][1] = 5
print(array)
''' output
[[0, 5, 0], [0, 5, 0], [0, 5, 0], [0, 5, 0]]
'''
잘못된 방법으로 만든 2차원 배열은 원소를 1개 바꿀 때도 다른 위치의 원소도 동일하게 바뀌는 상황이다.
언더바(_)는 언제 사용?
파이썬에서는, 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 언더바(_)를 사용한다.
리스트 관련 기타 메서드
a = [1, 4, 3]
print("기본 리스트: ", a)
#리스트에 원소 삽입
a.append(2)
print("삽입: ", a)
#오름차순 정렬
a.sort()
print("오름차순 정렬: ", a)
#내림차순 정렬
a.sort(reverse=True)
print("내림차순 정렬: ", a)
########################################
a = [4, 3, 2, 1]
# 리스트 원소 뒤집기
a.reverse()
print("원소 뒤집기: ", a)
# 특정 인덱스에 데이터 추가
a.insert(2, 3)
print("인덱스 2에 3 추가: ", a)
# 특정 값인 데이터 개수 세기
print("값이 3인 데이터 개수: ", a.count(3))
# 특정 값 데이터 1개 삭제
a.remove(1)
print("값이 1인 데이터 삭제: ", a)
########################################
# 특정 값 모두 삭제
a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5} #집합 자료형
# remove_list에 포함되지 않은 값만을 저장
result = [i for i in a if i not in remove_set]
print(result)
remove는 1개의 원소만 지울 수 있음.
집합을 활용하여 여러 원소도 지울 수 있다.
이코테 2021 시리즈 씹어먹기 by 조랭이떡
시리즈 목차
- 코딩테스트 출제 경향 및 알고리즘 성능 평가
- 파이썬 문법 부수기
- 그리디
- 구현
- DFS & BFS (추후링크)
- 정렬 알고리즘 (추후링크)
- 이진 탐색 (추후링크)
- 다이나믹 프로그래밍 (추후링크)
- 최단 경로 알고리즘 (추후링크)
- 기타 그래프 이론 (추후링크)
- 코딩 테스트에서 자주 출제되는 기타 알고리즘 (추후링크)
- 개발형 코딩 테스트 (추후링크)