✎ 대부분의 언어에서는 HashMap과 같은 별도의 라이브러리를 이용해야 파이썬의 사전자료형기능을 구현할 수 있음
✎ 파이썬에서는 기본 자료형이 이를 지원하므로 구현이 편리하다는 장점
<입력>
# 양의 정수
a = 10
print(a)
# 음의 정수
a = -2
print(a)
# 0
a = 0
print(a)
<출력>
10
-2
0
☑ 정수부 : 소수점 이하의 수를 뺀 정수 부분
☑ 소수부 : 소수점 오른쪽에 놓인 수의 부분
<입력>
# 양의 실수
a = 156.23
print(a)
# 음의 실수
a = -10.53
print(a)
# 소수부가 0일 때 0 생략
a = 2.
print(a)
# 정수부가 0일 때 0 생략
a = -.2
print(a)
<출력>
156.23
-10.53
2.0
-0.2
<입력>
# 10억의 지수 표현 방식
a = 1e9
print(a)
# 752.5
a = 75.25e1
print(a)
# 3.594
a = 3594e-3
print(a)
<출력>
1000000000.0
752.5
3.954
✓ 컴퓨터가 실수를 정확히 표현하지 못한다는 사실 기억!!
<입력>
a = 0.3 + 0.6
print(a)
if a == 0.9:
print(True)
else:
print(False)
<출력>
0.8999999999999999
False
→ 소수점 값을 비교하는 작업이 필요한 문제라면 실수 값을 비교하지 못해서 원하는 결과를 얻지 못할수 있음
=> round()함수 이용
☑ round()함수
<입력>
a = 0.3 + 0.6
print(round(a, 4))
if round(a, 4) == 0.9:
print(True)
else:
print(False)
<출력>
0.9
True
a = 7
b = 3
<입력>
# 나누기
print(a / b)
# 나머지
print(a % b)
# 몫
print(a // b)
<출력>
2.3333333333333335
1
2
<입력>
a = 5
b = 3
print(a ** b)
<출력>
125
예) 1부터 9까지의 정수 데이터를 담는 리스트 만든 뒤, 특정한 인덱스의 원소에 접근하여 출력
<입력>
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a)
# 인덱스 4, 즉 다섯번째 원소에 접근
print(a[4])
# 빈 리스트 선언 방법 1
a = list()
print(a)
# 빈 리스트 선언 방법 2
a = []
print(a)
<출력>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
5
[]
[]
# 크기가 N이고, 모든 값이 0인 1차원 리스트 초기화
<입력>
n = 10
a = [0] * n
print(a)
<출력>
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
<입력>
# 뒤에서 첫번째 원소 출력
print(a[-1])
# 뒤에서 세번째 원소 출력
print(a[-3])
# 네번째 원소값 변경
a[3] = 7
print(a)
<출력>
9
7
[1, 2, 3, 7, 5, 6, 7, 8, 9]
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
<입력>
# 두번째 원소부터 네번째 원소까지
print(a[1:4])
<출력>
[2, 3, 4]
※ 리스트의 인덱스는 0부터 출발하기 때문에 두번째 원소의 인덱스는 1이 됨
끝 인덱스의 경우 1을 뺀 값의 인덱스까지 처리됨
# 0부터 19까지의 수 중에서 홀수만 포함하는 리스트
<입력>
array = [i for i in range(20) if i % 2 == 1]
print(array)
<출력>
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
※ 위 코드를 일반적인 소스코드 작성할 경우
<입력>
array = []
for i in range(20):
if i % 2 == 1:
array.append(i)
print(array)
# 1부터 9까지의 수의 제곱 값을 포함하는 리스트
<입력>
array = [i * i for i in range(1, 10)]
print(array)
<출력>
[1, 4, 9, 16, 25, 36, 49, 64, 81]
# N * M 크기의 2차원 리스트 초기화
n = 3
m = 4
<입력>
array = [[0] * m for _ in range(n)]
print(array)
<출력>
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
✍ 언더바(_)는 어떤 역할일까요?
# 1 ~ 9짜지의 자연수를 더할 때
summary = 0
for i in range(1, 10):
summary += i
print(summary)
# 단순히 "Hello World "를 5번 출력할 때
for _ in range(5):
print("Hello World ")
※ 2번째 코드처럼 언더바(_)를 이용하여 무시할 수 있음
✓ 특정 크기의 2차원 리스트를 초기화할 때는 반드시 리스트 컴프리헨션을 이용해야함
# N * M 크기의 2차원 리스트 초기화(잘못된 방법)
n = 3
m = 4
<입력>
array = [[0] * m] * n
print(array)
array[1][1] = 5
print(array)
<출력>
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
[[0, 5, 0, 0], [0, 5, 0, 0], [0, 5, 0, 0]]
→ array[1][1]의 값을 5로 바꿨을 뿐인데, 3개의 리스트에서 인덱스 1에 해당하는 원소들의 값이 모두 5로 바뀜
=> 내부적으로 포함된 3개의 리스트가 모두 동일한 객체에 대한 3개의 레퍼런스로 인식되기 때문
∴ 특정한 크기를 가지는 2차원 리스트를 초기화할 때는 리스트 컴프리헨션을 이용해야 한다는 점 기억!!
<입력>
a = [1, 3, 5]
print("기본 리스트: ", a)
# 리스트에 원소 삽입
a.append(2)
print("삽입: ", a)
# 오름차순 정렬
a.sort()
print("오름차순 정렬: ", a)
# 내림차순 정렬
a.sort(reverse=True)
print("내림차순 정렬: ", a)
# 리스트 원소 뒤집기
a.reverse()
print("원소 뒤집기: ", a)
# 특정 인덱스에 데이터 추가
a.insert(2, 3)
print("인덱스 2에 3 추가: ", a)
# 특정 값인 데이터 개수 세기
print("값이 3인 데이터 개수: ", a.count(3))
# 특정 값 데이터 삭제
a.remove(1)
print("값이 1인 데이터 삭제: ", a)
<출력>
기본 리스트: [1, 3, 5]
삽입: [1, 3, 5, 2]
오름차순 정렬: [1, 2, 3, 5]
내림차순 정렬: [5, 3, 2, 1]
원소 뒤집기: [1, 2, 3, 5]
인덱스 2에 3 추가: [1, 2, 3, 3, 5]
값이 3인 데이터 개수: 2
값이 1인 데이터 삭제: [2, 3, 3, 5]
✓ 이 중 insert(), append(), remove()를 특히 더 눈여겨 두기!!
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]
print(result)
※ a에 포함된 원소를 하나씩 확인하며 그 원소가 remove_set에 포함되어 있지 않았을 때만 리스트 변수인 result에 넣겠다는 의미
✎ 프로그래밍 문법에서는 백슬래시와 같은 문자를 '이스케이프 문자'로 정해두고 큰따옴표를 출력하는 등의 특별한 목적으로 사용함
<입력>
data = "Don't you know \"Python\"?"
print(data)
<출력>
Don't you know "Python"?
# 문자열 변수에 덧셈(+)을 이용하면 단순히 문자열이 더해져서 연결
<입력>
a = "Hrllo"
b = "World"
print(a + "" + b)
<출력>
Hello World
# 문자열 변수를 양의 정수와 곱하는 경우, 문자열이 그 값만큼 여러 번 더해짐
<입력>
a = "Hello"
print(a * 3)
<출력>
HelloHelloHello
<입력>
a = "ABCDEFGH"
print(a[2 : 4])
<출력>
CD
a = (1, 2, 3, 4)
print(a)
a[2] = 7
→ 튜플의 값(1, 2, 3, 4)는 그대로 출력
→ 튜플의 값을 변경하려고 할 때 오류메시지가 출력(오류의 내용 : 원소의 대입이 불가능하다는 메시지)
=> 말 그대로 대입연산자(=)를 사용하여 값을 변경할 수 없다는 의미
<입력>
data = dict()
data['사과'] = "Apple"
data['바나나'] = "Banana"
data['코코넛'] = "Coconut"
print(data)
<출력>
{'사과': 'Apple', '바나나': 'Banana', '코코넛': 'Coconut'}
<입력>
data = dict()
data['사과'] = "Apple"
data['바나나'] = "Banana"
data['코코넛'] = "Coconut"
if '사과' in data:
print("'사과'를 키로 가지는 데이터가 존재합니다.")
<출력>
'사과'를 키로 가지는 데이터가 존재합니다.
<입력>
data = dict()
data['사과'] = "Apple"
data['바나나'] = "Banana"
data['코코넛'] = "Coconut"
# 키 데이터만 담은 리스트
key_list = data.keys()
# 값 데이터만 담은 리스트
value_list = data.values()
print(key_list)
print(value_list)
# 각 키에 따른 값을 하나씩 출력
for key in key_list:
print(data[key])
<출력>
dict_keys(['사과', '바나나', '코코넛'])
dict_values(['Apple', 'Banana', 'Coconut'])
Apple
Banana
Coconut
<입력>
# 집합 자료형 초기화 방법 1
data = set([1, 1, 2, 3, 4, 4, 5])
print(data)
# 집합 자료형 초기화 방법 2
data = {1, 1, 2, 2, 3, 4, 4, 5}
print(data)
<출력>
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
<입력>
a = set([1, 2, 3, 4, 5])
b = set([3, 4, 5, 6, 7])
# 합집합
print(a | b)
# 교집합
print(a & b)
# 차집합
print(a - b)
<출력>
{1, 2, 3, 4, 5, 6, 7}
{3, 4, 5}
{1, 2}
<입력>
data = set([1, 2, 3])
print(data)
# 새로운 원소 추가
data.add(4)
print(data)
# 새로운 원소 여러 개 추가
data.update([5, 6])
print(data)
# 특정한 값을 갖는 원소 삭제
data.remove(3)
print(data)
<출력>
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6}
{1, 2, 4, 5, 6}
<reference(참조)>
나동빈(2020).<이것이 취업을 위한 코딩 테스트다 with 파이썬>.서울: 한빛미디어(주)