Python으로 코테 공부 하기 기본 문법 - 자료형

일주일 전 쯤 우테코 코딩테스트를 통해 생애 첫 코테를 경험하고 알고리즘 공부를 시작해야겠다 생각이 들어
서점에가 책을 구입했다.
인터넷에서 조언을 구해 "이것이 코딩 테스트다 with 파이썬"이란 책을 구매 했는데 JS말고 파이썬으로 코테 알고리즘 공부를 할 생각이다!
JS 문법만 공부하던 내가 파이썬을 공부하며 JS와 다른 내 스스로 몰랐던 파이썬 문법을 정리해 끄적일 것이다!
자료형
파이썬에서 역시 이와 같은 에러가 있다.
a = 0.3+0.6 | |
if a == 0.9: | |
print(True) | |
else: | |
print(False) | |
// False |
원하는 결과를 얻고 싶으면 round( ) 함수를 이용하면 된다.
round( ) 함수를 호출할 때는 인자를 넣는데 첫 번째 인자는 실수형 데이터이고, 두 번째 인자는 반올림하고자 하는 위치 -1 이다. 두번째 인자 없이 인자를 하나만 넣을 때는 소수점 첫째 자리에서 반올림한다.
ex)
a = 1.235345 | |
print(round(a,4)) // 1.2353 |
수 자료형의 연산
파이썬에서 몫을 구할 때에는 몫 연산자(//)를 이용한다.
print(7//3) // 2 |
리스트 자료형
나는 쉽게 js의 배열이라 이해했다. 파이썬의 리스트 자료형은 배열 기능을 포함하고 있으며, 내부적으로 연결 리스트 자료구조를 채택하고 있어서 append( ), remove( ) 등의 메서드를 지원한다.
파이썬의 빈 리스트 선언 방법은 아래 2가지가 있고 크기가 N인 1차원 리스트를 초기화 할땐 다음 방식으로 하면 편리하다.
a =list() | |
print(a) // [] | |
b=[] | |
print(b) // [] | |
# 크기가 n이고 모든값이 0인 1차원 리스트 | |
n = 3 | |
v= [0] *n | |
print(v) // [0,0,0] |
리스트의 인덱싱과 슬라이싱
파이썬은 인덱스값에 양의 정수와 음의 정수 모두 사용할 수 있으며, 음의 정수를 넣으면 원소를 거꾸로 탐색한다.
또 리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때는 슬라이싱을 이용할 수 있다.
이때는 대괄호 안에 콜론(:)을 넣어서 시작 인덱스와 (끝 인덱스 -1)을 설정할 수 있다.
a = [1,2,3,4,5,6,7] | |
# 두번째 원소에서 네 번째 까지 | |
print(a[1:4]) |
리스트 컴프리헨션
나는 이부분이 조금 낯설었는데 리스트 컴프리헨션은 리스트를 초기화하는 방법 중 하나이다.
대괄호안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화 할 수 있다.
i for i in range(n) << 이 i는 n까지 반복한다 같은 뜻으로 이해했다.
# 0 부터 10까지 수 중에서 홀수만 포함하는 리스트 | |
array = [i for i in range(11) if i %2 ==1] | |
print(array) | |
# 1부터 9까지의 수의 제곱 값을 포함하는 리스트 | |
ary = [i* i for i in range(1,10)] | |
print(ary) |
리스트 컴프리헨션으로 2차원 리스트를 초기화
여기서 언더바(_)는 파이썬 자료구조/알고리즘에서 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 사용한다.
# n * m 크기의 2차원 리스트 초기화 | |
n =3 | |
m= 2 | |
array=[[0] *m for _ in range(n)] | |
print(array) // [[0,0], [0,0], [0,0]] |
리스트 관련 메서드
JS에서는 remove 함수를 사용할 경우 그 값만 사라지고 자리엔 undefined가 남았는데 파이썬은 그렇지 않다.
내림차순 정렬 같은 경우도 sort( ) 함수안에 조건식이 아닌 reverse = True로 처리하는점이 다르단 걸 느꼈다.
또 특정 인덱스에 insert(a,b) 함수로 a번째에 b를 추가하고, 특정 값인 데이터 개수를 셀 때는 a.count(value)로 세는게 JS랑 달라서 신선하다.
a = [1,2,3] | |
print("기본 메서드: ",a) // [1,2,3] | |
# 리스트에 원소 삽입 | |
a.append(4) | |
print("삽입: ",a) // [1,2,3,4] | |
# 오름차순 정렬 | |
a.sort() | |
print("오름차순: ",a) // [1,2,3,4] | |
# 내림차순 정렬 | |
a.sort(reverse = True) | |
print("내림차순: ",a) // [4,3,2,1] | |
# 리스트 원소 뒤집기 | |
a.reverse() | |
print("원소 뒤집기: ",a) // [1,2,3,4] | |
# 특정 인덱스에 데이터 추가 | |
a.insert(2,3) | |
print("인덱스 2에 3 추가: ",a) // [1,2,3,3,4] | |
# 특정 값인 데이터 개수 세기 | |
print("값이 3인 데이터 개수: " ,a.count(3)) // 2 | |
# 특정 값 데이터 삭제 | |
a.remove(1) | |
print("값이 1인 데이터 삭제: ", a) // [2,3,3,4] |
참고로 insert( ), remove( ) 함수는 시간 복잡도가 O(N)이라 남발하면 안된다.
파이썬에서 특정한 값의 원소를 모두 제거하는 방법
a에 포함된 원소를 하나씩 확인하며 그 원소가 b에 포함되어 있지 않았을 때만 리스트 변수인 result에 넣겠다는 의미다.
a=[1,2,3,4,5,5] | |
b =[3,5] | |
#remove_set에 포함되지 않는 값만을 저장 | |
result=[i for i in a if i not in b] | |
print(result) // [1,2,4] |
문자열 자료형
JS에서 다른점은 아래와 같다.
JS에서는 문자형 더하기 숫자는 숫자가 문자형으로 자동 변환 되어서 더해졌는데 파이썬에선 그렇지 않고 또
문자열 곱하기 숫자는 JS에서는 NaN, 파이썬에서는 문자열이 n번 만큼 반복된다.
a ="mingyu" | |
print(a*3) // "mingyumingyumingyu" | |
b="mingyu" | |
print(b+3) // error |
튜플 자료형
튜플 자료형은 이번에 처음 알게된 말이라 잘 이해가 되지않는데 특징은 아래와 같다.
튜플은 한 번 선언된 값을 변경할 수 없다.
리스트는 대괄호를 이용하지만 튜플은 소괄호( ) 를 이용한다.
튜플 자료형은 그래프 알고리즘을 구현할 때 자주 사용된다.
사전 자료형
사전 자료형은 키와 값의 쌍을 데이터로 가지는 자료형이다.
데이터 검색 및 수정에 있어서 리스트보다 훨씬 빠르게 동작한다.
키 데이터만 뽑아서 리스트를 뽑을 때는 keys( ) 함수를, 값 데이터를 뽑아서 리스트로 이용할 때는 values( ) 함수를 이용한다.
data = dict() | |
data['사과'] = "apple" | |
if '사과' in data: | |
print("사과가 있어요") // 사과가 있어요 |
집합 자료형
파이썬에서는 집학을 처리하기 위한 집합 자료형을 제공하고 아래와 같은 특징이 있다.
중복을 허용하지 않는다.
순서가 없다.
리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있지만 사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다. 그리고 집합 자료형은 키가 존재하지 않고, 값 데이터만 담게 된다.
집합 자료형은 set( ) 함수를 이용하거나, 중괄호 안에 각 원소를 콤마를 기준으로 구분해서 넣으면 된다.
data = set([1,2,3,4,4,5]) | |
print(data) // {1,2,3,4,5} | |
data = {1,1,1,2,3,4} | |
print(data) // {1,2,3,4} |
집합 자료형의 연산으로는 합집합, 교집합, 차집합 연산이 있고 합집합은 " | ", 교집합은 " & ", 차집합은 " - " 을 이용한다.
관련 함수로는 하나의 데이터를 추가할 때는 add( ) 함수를, unpdate( ) 함수는 여러 개의 값을 추가할 때,
특정 값을 제거 할 때는 remove( ) 함수를 사용한다.