728x90
파이썬으로 알고리즘을 공부하기에 앞서
기본 개념들을 확실하게 익혀야 할 것 같아서 공부한 기록이다.
자료형
제일 기본적인 자료형이다. 정수형, 실수형, 리스트, 튜플, 문자열, 딕셔너리, 집합이 있다.
새로 알게 된 부분만 기록하려고 한다.
실수
지수 표현 방식
- 파이썬에서는 e나 E를 이용한 지수 표현 방식을 이용할 수 있다.
a=1e9 #10억의 지수 표현 방식
print(a) #1000000000.0
round()
- 컴퓨터 시스템은 실수를 연산할 때 부동 소수점을 이용하기 때문에 정확한 실수 표현이 안 될 수 있다.
- round 메서드를 사용하면, n번째 자리에서 반올림할 수 있다.
import math
b=0.9912314
print(round(b,3)) #0.991
print(math.ceil(b)) #1
print(math.floor(b)) #0
- round를 사용하면, 몇번째 자리에서 반올림할 것인 지 선택할 수 있다.
- call signature을 보면, 옵션으로 몇번째 자리에서 반올림할 것인 지 선택할 수 있도록 오버로딩되어있다.
- ceil과 floor은 이 작업이 안 되어있는 듯하다.
- 애초에 반환값이 int다.
리스트
리스트 초기화
- 곱셈을 사용해서 리스트를 초기화할 수 있다.
#크기가 N이고, 모든 값이 0인 1차원 리스트 초기화
N=10
c=[0]*N
print(c) #[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
리스트의 슬라이싱
- 리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때 콜론(:)을 사용해서 슬라이싱할 수 있다.
d=[1,2,3,4,5,6,7]
print(d[4:-1]) #[5, 6]
- 인덱스가 4인 원소부터 마지막 원소 전까지의 리스트 슬라이싱
리스트 컴프리헨션
- 리스트를 초기화하는 방법 중 하나이다. 대괄호 안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화 한다.
#0부터 19까지의 수 중에 홀수만 포함하는 리스트
e=[i for i in range(20) if i%2==1]
print(e) #[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
#1부터 9까지 수의 제곱 값을 포함하는 리스트
f=[i*i for i in range(1,10)]
print(f) #[1, 4, 9, 16, 25, 36, 49, 64, 81]
- 첫 번째에서는 반복문에 i에 대한 조건문을 더해 원하는 조건의 i를 반환하는 듯한 코드
- 두 번째는 i에 대한 반복문을 이용해 i에 대한 연산을 바로 한 코드
변수 반복문 조건문 순서이다.
#N X M 크기의 2차원 리스트 초기화
n=3
m=4
arr=[[0]*m for _ in range(n)]
print(arr) #[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
- 위와 같이 2차원 배열을 초기화할 때 효과적이다.
- 2차원 배열을 초기화할 때 컴프리헨션을 사용하지 않으면, 포괄하는 배열 내부 각각의 배열들이 동일한 객체에 대한 레퍼런스로 인식될 수 있으니 꼭 컴프리헨션을 사용해야 한다.
언더바(_)의 역할
- 반복을 수행하되 변수의 값을 무시하고자 할 때 언더바를 자주 사용한다.
리스트에서 특정 값의 원소를 모두 제거해야 할 때
g=[1,2,3,3,4,4,4,5]
remove_set=[3,4]
result=[i for i in g if i not in remove_set]
print(result) #[1, 2, 5]
튜플
튜플은 소괄호()를 이용한다.
튜플은 한 번 선언된 값을 변경할 수 없다.
- 위와 같은 튜플의 특성을 이용해 변경하면 안 되는 값이 변경되고 있지 않은지 체크할 수 있다.
딕셔너리
딕셔너리는 키와 값의 쌍을 데이터로 가지는 자료형이다. 때문에 순서가 없다.
- 딕셔너리도 앞서 기록한 리스트, 문자열, 튜플처럼 원소들을 차례대로 반복할 수 있는 Iterable 자료형이다.
- 따라서 in 문법도 사용이 가능하다.
집합
특징
- 중복을 허용하지 않는다.
- 순서가 없다.
집합의 초기화
data=set([1,1,2,3,4,5,5])
print(data) #{1, 2, 3, 4, 5}
data={1,2,2,3,4,4,5}
print(data) #{1, 2, 3, 4, 5}
- set 메서드 안에 리스트를 넣어준다.
- 중괄호({}) 안에 원소를 넣어준다.
함수
함수 부분에서는 람다 표현식에 관해 새로 알게 되었다.
람다 표현식
- 람다 표현식을 사용하면 함수를 매우 간단하게 작성하여 적용할 수 있다.
print((lambda a,b:a+b)(3,7)) #10
입출력
입출력 부분에서는 코딩테스트에서 유용하게 쓰일 만한 것들을 공부했다.
Input 데이터 관리
- 코딩 테스트에서는 입력이 보통 아래와 같이 주어진다.
3
1 12 54
- Input 데이터를 효과적으로 관리할 수 있을까
- list(map(int, input().split())) 을 이용하면 된다.
list(map(int,input().split()))
- 위에서 작성한 예시를 입력으로 받는다고 가정하자.
- input().split() : 공백으로 구분하여 데이터를 리스트로 저장한다.
- map(int, ) : map 함수는 첫 번째 인자로 받은 함수를 두 번째 인자를 순회하며 적용한다.
readline()
- 파이썬에서 input() 함수는 동작 속도가 느려서 시간 초과로 오답을 받을 수도 있다.
- sys 라이브러리에 정의되어 있는 sys.stdin.readLine() 함수를 이용하면 보다 빠르게 입력을 받을 수 있다.
- 입력 후 개행 문자를 없애기 위해 rstrinp() 함수를 꼭 사용해야 한다.
data=sys.stdin.readline().rstrip()
print(data)
출처
이것이 취업을 위한 코딩 테스트다 -나동빈
728x90
'Python' 카테고리의 다른 글
[Python] Phython Asterisk(*) 사용법 (0) | 2022.12.11 |
---|---|
[Python] Python iter, enumerate 함수 (0) | 2022.12.10 |
[Python] 파이썬 주요 라이브러리(math,iter,heapq,bisect,collections) (0) | 2022.12.03 |
[Python] Python format 사용법 (0) | 2022.07.12 |