들어가며
저번 시간에 데이터 타입의 종류 중 숫자형, 논리형, 문자형까지 배워보았다. 오늘도 이어서 시퀀스 데이터 타입과 맵핑 데이터 타입을 알아보자.
시퀀스 데이터 타입
값을 여러 개로 묶을 수 있는 타입이다. 파이썬에서는 `list`, `tuple`을 주로 다루게 된다.
# 리스트 타입
salary = [5000, 6000, 7000, 6000, 9000]
# .append 요소 추가
salary.append(10000)
# [5000, 6000, 7000, 6000, 9000, 10000]
# .extend 요소 확장 추가
salary.extend([300, 400, 500])
# [5000, 6000, 7000, 6000, 9000, 300, 400, 500]
리스트에 요소를 추가할 때 `append`와 `extend`를 사용할 수 있는데 두 요소의 차이는 어떻게 추가하느냐로 구분할 수 있다. `append`같은 경우 파라미터로 주어진 요소를 그대로 타켓 리스트에 추가하는 반면, `extend`는 껍질을 벗겨내고 추가하는(?) 느낌이라고 생각하면 될 것 같다. 즉 중복된 값을 가지는 시퀀스 타입의 요소만 추가할 수 있다.
# 값의 삭제
## del
del salary[2]
`del`은 해당 값을 삭제하는 역할을 한다. 약간 sql 명령어 같은 느낌이다.
range()
연속적인 수열을 만들 때 자주 활용되는 함수이다.
# range를 활용한 리스트 생성
# range(stop)
# range(start, stop[, step])
list(range(10))
list(range(0, 10, 2))
# [0, 2, 4, 6, 8]
생성되는 수열들을 리스트타입으로 형변환 해줌으로써 해당 요소에 접근하기가 용이해진다. 파라미터를 한개만 넣으면 `(0, 지정한 수-1)` 까지 범위가 지정되고, 3개의 파라미터를 넣게 되면 시작점, 끝점, 간격을 모두 지정해줄 수 있다.
연산자 in, not in
# 리스트의 다양한 연산자와 기능
## 연산자 in, not in
4 in [1, 2, 3, 4] # 4가 [1,2,3,4]에 있니? True
4 not in [1, 2, 3, 4] # 4가 [1,2,3,4]에 없니? False
`in`과 `not in`을 이용하여 타겟 값의 존재 여부를 논리 데이터 타입으로 확인할 수 있다.
또한 다양한 메서드를 활용해서 리스트를 여러 방면으로 다룰 수도 있다.
min() | 최소값 |
max() | 최대값 |
index() | 찾고자 하는 요소의 인덱스 값 |
count() | 찾고자 하는 요소의 개수 |
다차원 리스트
리스트 안에 리스트를 넣는 것도 가능하다. 아래는 2차원 리스트를 초기화 한 것이다.
# 다차원 리스트 이해하기
lists = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
lists[1][0] # 4
인덱싱하는 방법은 가장 바깥쪽부터 안쪽으로 접근한다. 4라는 요소는 2번째 리스트요소에 있고, 그 2번째 리스트요소에서 첫번째에 위치해있기 때문에 `lists[1][0]`이라고 적는다.
맵핑 데이터 타입
딕셔너리
딕셔너리는 `키(key)`와 `값(value)`를 연결한 쌍을 활용해서 여러 값을 구분해서 저장한다. 대괄호를 사용하는 리스트와 다르게 딕셔너리는 중괄호를 사용한다.
# 이 강의의 속성을 딕셔너리로 저장 (과정, 도구, 기간)
this_lecture = {'과정':'Python 기초', '도구':'Jupyter Notebook', '기간':'4일'}
get() 메서드
값에 접근하는 방법은 두가지인데 하나는 리스트의 인덱스 대신에 키를 활용한 방법이고, 하나는 메서드 `get()`을 활용한 방법이다. 둘 다 기능이 똑같아보이지만 딕셔너리에 없는 키를 접근할 때 첫번째 방법은 에러가 뜨고, 두번째 방법은 에러가 뜨지 않고 컴파일은 가능하게 해주는 기능을 가지고 있다.
# 대괄호와 키를 활용한 선택
## 리스트의 인덱스 대신 키를 활용
## 없는 키 조회 시 에러
this_lecture['과정']
# 메서드 get()을 활용한 선택
a = this_lecture.get('과정')
# 키값이 없으면 예외처리
`keys()` | 키 목록을 선택 |
`values()` | 값 목록을 선택 |
Python 제어문
프로그래밍 언어에서 빼놓을 수 없는 제어문이다. 조건문과 제어문을 직접 써보면서 어떻게 활용할 수 있는지 알아보자.
if 조건문
조건을 설정하고 이 조건이 참이면 해당 코드를 실행하고 거짓이면 실행하지 않는 간단한 흐름으로 동작한다. `if` 이외에도 `elif`나 `else`를 추가로 활용할 수도 있다.
# if와 elif와 else의 활용
score = 80 # 결측
if score == 0: # score가 0 이라면,
print('미응시') # 미응시 메시지 출력
elif score >= 90: # score가 90 이상이라면,
print('우수') # 우수 메시지 출력
elif score >= 80: # score가 80 이상이라면,
print('합격') # 합격 메시지 출력
else: # score가 위의 조건에 모두 부합하지 않으면,
print('탈락') # 탈락 메시지 출력
조건이 하나뿐이라면 `if`만 사용하고, 여러개이면 `elif`와 함께 사용한다. 또한 조건이 하나뿐인데 참일 때와 거짓일 때 2가지 상황을 모두 고려하고자 하면 `if-else`를 함께 사용할 수 있다.
주의할 점은 코드 실행은 위에서부터 아래로 진행되기 때문에 예를 들어 아래와 같이 조건문의 순서가 바뀌면 `score`값이 90이상이라고 해도 두번째 조건문에 걸리게 된다. 따라서 조건 범위를 더 세밀하게 수정하거나 순서를 일정한 규칙에 맞게 수정하는 것이 좋다.
if score == 0:
print('미응시')
elif score >= 80: # score가 90일 경우 이 조건문에 걸림
print('합격')
elif score >= 90: # 의도한 조건문
print('우수')
else:
print('탈락')
match문
다른 언어에서의 `switch`문과 매우 유사하다. 타겟 값이 설정해준 `case`에 해당하면 그 `case`의 코드를 실행하는 흐름을 가지고 있다.
num = int(input())
match num:
case 1:
print('1번 선택')
case 2:
print('2번 선택')
case 3:
print('3번 선택')
case _:
print('잘못된 입력입니다.')
이번 수업을 통해 `match`문을 처음 알게 되었는데 `break`문을 써주는 다른 언어와 달리 파이썬의 `match`문은 `case`마다 `break`문을 써줄 필요가 없어서 훨씬 코드가 간결한 느낌이었다. `switch`문에서의 `default`는 `match`문에서 `case _:` 와 동일하다.
for 반복문
`for`문은 반복대상을 지정하고 특정한 명령을 반복해서 실행해준다.
for 변수 in 범위:
<반복할 코드>
for i in [1,2,3]:
print(i)
# 1
# 2
# 3
반복문은 반복되는 횟수가 커질수록 효율성이 높아지고 코드가 간결해진다. 물론 1,000,000이상 같이 너무 커져버리면 실행 속도가 느려지기 때문에 불필요하게 큰 횟수의 반복문은 지양해야 할 것이다.
while 반복문
`for`문과는 다른 느낌의 반복문이다. 3가지의 요소가 모두 갖춰져야 원활한 실행이 가능하다.
- 초기화 : 판별식에서 사용할 변수를 초기화 해준다.
- 판별식 : 반복할 조건을 설정한다.
- 증감식 : 판별식이 거짓이 될 때까지 즉, 반복문을 빠져나오기 위해 초기화한 변수에 필요한 증감연산을 해준다.
## 3요소 (초기화, 증감식, 판별식)
num = 1 # 초기화
while num < 5: # 판별식
print(num)
num += 1 # 증감식
마무리
교수님 말씀처럼 크게 어려운 부분은 없지만, 필수로 알아야 하는 개념들이 점점 쌓이고 이것들을 복합적으로 활용해야 하다 보니 어렵게 느껴지는 것 같다. 그리고 연습문제를 풀다가 막히는 부분이 종종 있었는데, 그럴 때마다 조원들과 소통하며 문제를 해결해나갔던 것이 큰 도움이 되었고, 함께 성장해나가는 느낌이 들어서 흐뭇했다.
'ABC부트캠프 테크노트' 카테고리의 다른 글
[6일차] ABC부트캠프 : 파이썬 프로그래밍 미니프로젝트 (0) | 2024.07.11 |
---|---|
[5일차] ABC부트캠프 : 파이썬프로그래밍 기초3 (0) | 2024.07.10 |
[3일차] ABC부트캠프 : 파이썬 프로그래밍 기초1 (0) | 2024.07.08 |
[2일차] ABC부트캠프 : ESG포럼 & 세미나 (0) | 2024.07.05 |
[1일차] ABC 부트캠프 : 오리엔테이션 (0) | 2024.07.04 |