▷ 오늘 학습 내용: 자료구조 강의(7~9)
튜플은 수정 불가 → 리스트로 변환 후 정렬하기
sorted()함수로 튜플도 정렬할 수 있다.(정렬 후 리스트로 반환됨)
for문을 이용하면 튜플의 아이템을 자동으로 참조할 수 있다.
튜플 내부에 있는 또 다른 튜플의 아이템을 조회할 수도 있다.
studentCnts = (1,18), (2,19), (3,23), (4,21), (5,20), (6,22), (7,17)
#1
for i in range(len(studentCnts):
print('{}학급 학생수: {}'.format(studentCnts[i][0], studentCnts[i][1]))
#2
for classNo, cnt in studentCnts:
print('{}학급 학생수: {}'.format(classNo, cnt))
#3 합계와 평균 구하기
sum = 0; avg = 0
for classNo, cnt in studentCnts:
sum += cnt
print('전체 학생 수 : {}명'.format(sum))
print('평균 학생 수 : {}명'.format(sum/len(studentCnts)))
#학급 학생 수가 가장 작은 학급과 가장 많은 학급 출력하기
studentCnts = (1,18), (2,19), (3,23), (4,21), (5,20), (6,22), (7,17)
minClassNo = 0; maxClassNo = 0
minCnt = 0; maxCnt = 0
for classNo, cnt in studentCnts:
if minCnt == 0 or minCnt > cnt:
minClassNo = classNo
minCnt = cnt
if maxCnt < cnt:
maxCnt = cnt
maxClassNo = classNo
print('학생 수가 가장 적은 학급: {}학급({}명)'.format(minClassNo, minCnt))
print('학생 수가 가장 많은 학급: {}학급({}명)'.format(maxClassNo, maxCnt))
while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다.
sports = ('축구', '야구', '배구', '농구')
#1
n = 0
while n < len(sports):
print(sports[n])
n += 1
#2
n = 0
flag = True
while flag:
print(sports[n])
n += 1
if n == len(sports):
flag = False
#3
n = 0
while True:
print(sports[n])
n += 1
if n == len(sports):
break
#학급 학생 수가 가장 작은 학급과 가장 많은 학급 출력하기
studentCnts = (1,18), (2,19), (3,23), (4,21), (5,20), (6,22), (7,17)
minClassNo = 0; maxClassNo = 0
minCnt = 0; maxCnt = 0
n = 0
while n < len(studentCnts):
if minCnt == 0 or minCnt > studentCnts[n][1]:
minCnt = studentCnts[n][1]
minClassNo = studentCnts[n][0]
if maxCnt < studentCnts[n][1]:
maxCnt = studentCnts[n][1]
maxClassNo = studentCnts[n][0]
n += 1
print('학생 수가 가장 적은 학급: {}학급({}명)'.format(minClassNo, minCnt))
print('학생 수가 가장 적은 학급: {}학급({}명)'.format(maxClassNo, maxCnt))
키(key)와 값(value)를 이용해서 자료를 관리한다.
'{}'를 이용해서 선언하고, '키:값'의 형태로 아이템을 정의한다.
key와 value에는 숫자, 문자(열), 논리형 뿐만 아니라 컨테이너 자료형도 올 수 있다.
단, key에 immutable(변경할 수 없는)값은 올 수 있지만 mutable 값은 올 수 없고 key는 중복되면 안됨
키(key)를 이용해서 값(value)을 조회
존재하지 않는 키를 이용하면 에러 발생(KeyError)
get(key)를 이용해서 값(value)을 조회 할 수 있다.
get()은 key가 없어도 에러가 발생하지 않는다.
myInfo = {'학년':4, '주소':'대한민국', '취미':['요리', '여행']}
print(myInfo['취미']) # ['요리', '여행']
print(myInfo['나이'] # KeyError: '나이'
print(myInfo.get('학년') # 4
print(myInfo.get('성별') # None
딕셔너리이름[키(key)] = 값(value) 형태로 아이템 추가/수정
추가 하려는 키가 이미 있다면 기존 값이 변경된다.
myInfo = {}
myInfo['학년'] = 3
myInfo['학년'] = 4 # 기존에 입력된 3 → 4로 변경됨
# 0부터 10까지의 각각의 정수에 대한 팩토리얼을 딕셔너리에 추가하기
factorialDic = {}
for i in range(11):
if i == 0:
factorialDic[i] = 1
else:
for j in range(i,i+1):
factorialDic[i] = factorialDic[i-1] * j
print(factorialDic)
전체 키와 값을 조회할 수 있다.
list 형식으로 변환할 수 있음
memInfo = {'이름':'홍길동', '메일':'gildong@naver.com', '취미':['농구','게임']}
ks = memInfo.keys()
print(ks) #dict_keys(['이름', '메일', '취미'])
print(type(ks)) #<class 'dict_keys'>
ks = list(ks)
print(ks) #['이름', '메일', '취미']
print(type(ks)) #<class 'list'>
vs = memInfo.values()
print(vs) #dict_values(['홍길동', 'gildong@naver.com', ['농구', '게임']])
print(type(vs)) #<class 'dict_values'>
items = memInfo.items()
print(items)
#dict_items([('이름', '홍길동'), ('메일', 'gildong@naver.com'), ('취미', ['농구', '게임'])])
print(type(items)) #<class 'dict_items'>
#for문을 이용한 조회
for key in memInfo.keys():
print(f'{key}: {memInfo[key]}')
for idx,key in enumerate(ks):
print(f'{idx}:{key}')
del abc['d'] → abc 딕셔너리에서 키가 'd'인 item 삭제
abc.pop('d') → abc 딕셔너리에서 키가 'd'인 item 삭제
pop() 함수를 이용하면 삭제하려는 value값을 반환할 수 있음
in, not in → 키(key) 존재 유/무 판단 → True/False
len() → 딕셔너리 길이(아이템 개수)
clear() → 모든 아이템 삭제
abc.clear() → abc 딕셔너리에 있는 모든 아이템 삭제
📝 리스트, 튜플, 딕셔너리 헷갈리지 않게 잘 정리해야겠다.
어떤 상황에 어떤 자료구조를 선택할지 판단할 수 있게 연습이 필요할 것 같다.
▷ 내일 학습 계획: 자료구조 강의(문풀 1~3), 알고리즘 강의(1~2)