파이썬에서는 기본적으로 제공하는 데이터 타입들이 있다.
집을 사면 딸려오는 가구(사실 그 딸려오는 가구 값도 포함되는건 맞지만)처럼 파이썬에서는 기본 데이터 타입과,
컬렉션 데이터 타입을 제공한다.
04-1 빌트인 데이터 타입
기본 데이터 타입
기본 데이터 타입에는 정수형, 부동소수형, 문자열 타입이 있다.
정수형
: 양, 음의 정수와 0을 포함한다.
사칙연산 뿐만 아니라 그 외의 연산도 가능하다.
예를들어, **을 통한 지수 연산, //을 통한 나눗셈에서 몫만 반환하는 연산 등
아래는 정수형 데이터 정의 및 활용 방법이다.
# 정수형 변수 선언
a = 4
b = 3
# 정수형 산술 연산
print(a + b) # 더하기 1
print(a - b) # 빼기 12
print(a * b) # 곱하기 45
print(a / b) # 나누기(소수점 포함) 1.3...
print(a // b) # 나누기(소수점 제외) 1
print(a % b) # 모듈러 연산(나머지 값 출력) 1
print(-a) # 부호 바꿈 -4
print(abs(-a)) # 절대값 4
print(a**b) # a의 b승 64
# 정수형 비교 연산
print(a == b) # 같은 값인지 비교 False
print(a != b) # 같은 값이 아닌지 비교 True
print(a > b) # 왼쪽값이 더 큰지 비교 True
print(a < b) # 오른쪽 값이 더 큰지 비교 False
print(a >= b) # 왼쪽값이 더 크거나 같은지 비교 True
print(a <= b) # 오른쪽값이 더 크거나 같은지 비교 False
# 정수형 비트 연산
a = 13
b = 4
print(a & b) # AND 4
print(a | b) # OR 13
print(a ^ b) # XOR 9
print(~a) # NOT -14
print(a << 2) # 왼쪽 시프트 (a에 2^2를 곱한 것과 동일) 52
print(a >> 1) # 오른쪽 시프트 (a에 2^1로 나눈 것과 동일) 6
#정수형 논리 연산
print(a and b) # 논리 연산 AND 4
print(a or b) # 논리 연산 OR 13
print(not a) # 논리 연산 NOT / False
*~a가 14인 이유
a는 2진수로 표현하면 0000 1101 이다. ~(not)을 하면 0000 1101이 반전돼서 1111 0010이 된다.
맨 왼쪽의 값이 0이면 양수, 1이면 음수를 나타내는 것이다.
1111 0010은 음수의 값이고, 컴퓨터에서 음수는 2의 보수로 표현된다.
2의 보수를 읽기 위해서는 값을 한번 반전해주고 => 0000 1101
그대로 1을 더해준다. => 0000 1110 이는 10진수로 14이다.
하지만 이 값은 음수이므로 -14로 표현할 수 있는 것이다.
*논리 연산 AND 연산자
파이썬에서 논리 연산 AND는 두 피연산자가 모두 참이면 마지막 값을 반환한다.
만약 첫 번째 피연산자가 거짓이거나 NULL이면, 첫 번째 피연산자를 반환한다.
부동소수형
부동소수형에서는 사칙 연산, 정수형 나누기, 모듈러, 제곱 연산, 논리 연산을 할 수 있다.
부동소수형에서 눈여겨 봐야할 곳은 10 % 3.2의 값이 0.4가 나와야 하지만 파이썬에서는
0.39999999999999947이 나온다.
그 이유는 파이썬에서는 부동소수형 데이터를 이진법으로 표현하기 때문에 발생하는 거고, 표현 과정에서 오차가 발생한다.
이를 엡실론이라고 한다.
따라서 부동소수형 데이터를 활용한 문제에서는 오차 허용 범위의 언급을 확인하고, 주의 해야한다.
04-2 컬렉션 데이터 타입
컬렉션 데이터 타입은 여러 값을 담는 데이터 타입을 말한다. 그 유형으로 리스트, 튜플, 딕셔너리, 셋, 문자열 등이 있다.
또한 컬렉션 데이터 타입은 두가지로 나눌 수 있는데, 이는 데이터의 수정 가능 여부에 따라 변경할 수 있는 객체(mutable object)와 변경할 수 없는 객체(immutable object)로 나눌 수 있다.
변경할 수 있는 객체(mutable object)
: 객체 생성 후 객체를 수정할 수 있다. 리스트, 딕셔너리, 셋이 이 유형에 해당한다.
변경할 수 없는 객체(immutable object)
: 객체 생성 후 객체를 수정할 수 없다. 문자열, 튜플이 이 유형에 해당한다.
(정수나 부동소수점은 컬렉션 데이터 타입은 아니지만 이뮤터블 객체에 속한다)
<리스트>
: 리스트는 뮤터블 객체이고, 순서가 있는 자료형이다. 리스트는 인덱스를 활용해 특정 위치의 원소에 접근할 수 있다.
기본적인 리스트 사용법은 다음과 같다.
# 리스트 선언
tmp_list = [1, 2, 3, 4]
tmp_list2 = [5, 6] + [7, 8, 9]
tmp_list3 = list(tmp_list)
print(tmp_list) # [1, 2, 3, 4]
print(tmp_list2) # [5, 6, 7, 8, 9]
print(tmp_list3) # [1, 2, 3, 4]
# 리스트 인덱싱
tmp_list.append(5)
print(tmp_list) # [1, 2, 3, 4, 5]
# 인덱싱으로 값 삭제
del tmp_list[0]
print(tmp_list) # [2, 3, 4, 5]
리스트의 활용방법 중에 리스트 슬라이싱이라고 있다.
슬라이싱은 시퀀스 자료형의 범위를 지정해 값을 복사하여 가져오는 방식을 말한다.
리스트 슬라이싱 활용법은 다음과 같다.
print(tmp_list[0:2]) # [2, 3]
print(tmp_list[1:]) # [3, 4, 5]
print(tmp_list[2:3]) # [4]
print(tmp_list[-2:-1]) # [4]
<딕셔너리>
: 딕셔너리는 뮤터블 객체이고, 키와 값 쌍을 저장하는 해시테이블로 구현돼 있다.
키를 사용하여 값을 검색하는 자료형이다.
기본적인 딕셔너리 사용법은 다음과 같다.
# 딕셔너리 초기화
dic = { }
# 딕셔너리 삽입과 출력
dic["yellow"] = 1
dic["green"] = 3
dic["blue"] = 5
print(dic) #{'yellow': 1, 'green': 3, 'blue': 5}
딕셔너리 검색 활용법은 다음과 같다.
키에 해당하는 문자열인지 확인하고, 키의 값이 딕셔너리에 존재하면 키-값을 출력한다.
key = "yellow"
if key in dic:
value = dic[key]
print(f"{key}: {value}")
else:
print(f"{key}는 딕셔너리에 존재하지 않습니다. ")
딕셔너리 수정 방법은 다음과 같다.
dic["green"] = 5
print(dic) #{'yellow': 1, 'green': 5, 'blue': 5}
딕셔너리 삭제 방법은 다음과 같다.
del dic["green"]
print(dic) #{'yellow': 1, 'blue': 5}
<튜플>
: 튜플은 이뮤터블 객체이다. 한 번 생성하면 삽입하거나 삭제할 수 없다.
기본적인 튜플 사용법은 다음과 같다.
# 튜플 초기화
tup = (1, 2, 3)
튜플은 인덱싱과 슬라이싱을 활용할 수 있고, 리스트와 활용법이 같다.
<문자열>
: 문자열은 문자의 집합 형태이며, 이뮤터블 객체이다.
기본적인 문자열 사용법은 다음과 같다.
# 문자열 초기화
string = "Hi" # 큰 따옴표 사용
string2 = 'Hello'# 작은 따옴표 사용
# 문자열 추가, 삭제
string3 = "A-"
string3 += "yo" # 이때, string3은 기존의 문자열의 메모리 주소와의 연결은 끊고, 문자열을 새로 만들고 해당 문자열이 담길 메모리 주소를 새로 할당한다.
print(string3) # "A-yo"
# 문자열 수정
string4 = "Ha"
string4 = string4.replace("a", "o")
print(string4) # "Ho"
04-3 함수
파이썬에서의 함수 사용법은 다음과 같다.
def add(num1, num2):
result = num1 + num2
return result
# 함수 호출
ret = add(5, 10)
print(ret)
함수를 더 간단하게 사용하기 위한 방법으로 파이썬에서는 람다식을 사용할 수 있다.
또한 람다식은 익명 함수를 만드는데 사용한다.
익명 함수는 이름 없는 함수이고, 코드에서 일시적으로 실행할 목적으로 사용하거나, 다른 함수의 인수로 사용할 수 있다.
람다식의 사용법은 다음과 같다.
# 람다식 정의
lambda x, y : x + y # x와 y를 받아서 더한 값을 반환하는 람다식
# 람다식 사용 유형 1
add = lambda x, y: x + y
print(add(5, 4)) # 9
# 람다식 사용 유형 2
num = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x**2, num))
print(squares) # [1, 4, 9, 16, 25]
04-4 코딩 테스트 코드 구현 노하우
1. 조기 반환
: 코드 실행 과정이 끝나기 전에 반환하는 기법
2. 보호 구문
: 본격적인 로직 진행 전 예외 처리 코드를 추가하는 기법
3. 합성 함수
: 2개 이상의 함수를 활용해 함수를 추가로 만드는 기법
보통 합성 함수로 람다식을 활용한다.
* 정리된 개념 출처: 코딩 테스트 합격자 되기 - 박경록(파이썬 편)