자료구조_4

YJ·2023년 3월 20일

▷ 오늘 학습 내용: 자료구조 강의(7~9)

24_튜플 아이템 정렬

튜플은 수정 불가 → 리스트로 변환 후 정렬하기
sorted()함수로 튜플도 정렬할 수 있다.(정렬 후 리스트로 반환됨)

25_튜플과 for문

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))

26_튜플과 while문

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))

27_딕셔너리(Dictionary)

키(key)와 값(value)를 이용해서 자료를 관리한다.
'{}'를 이용해서 선언하고, '키:값'의 형태로 아이템을 정의한다.

key와 value에는 숫자, 문자(열), 논리형 뿐만 아니라 컨테이너 자료형도 올 수 있다.
단, key에 immutable(변경할 수 없는)값은 올 수 있지만 mutable 값은 올 수 없고 key는 중복되면 안됨

28_딕셔너리 조회

키(key)를 이용해서 값(value)을 조회
존재하지 않는 키를 이용하면 에러 발생(KeyError)

get(key)를 이용해서 값(value)을 조회 할 수 있다.
get()은 key가 없어도 에러가 발생하지 않는다.

  myInfo = {'학년':4, '주소':'대한민국', '취미':['요리', '여행']}

  print(myInfo['취미'])  # ['요리', '여행']
  print(myInfo['나이']  # KeyError: '나이'
  print(myInfo.get('학년')  # 4
  print(myInfo.get('성별')  # None

29_딕셔너리 추가, 수정

딕셔너리이름[키(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)

30_keys()와 values()

전체 키와 값을 조회할 수 있다.
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}')

31_딕셔너리 삭제

del abc['d'] → abc 딕셔너리에서 키가 'd'인 item 삭제
abc.pop('d') → abc 딕셔너리에서 키가 'd'인 item 삭제
pop() 함수를 이용하면 삭제하려는 value값을 반환할 수 있음

32_딕셔너리 유용한 기능

in, not in → 키(key) 존재 유/무 판단 → True/False
len() → 딕셔너리 길이(아이템 개수)
clear() → 모든 아이템 삭제
abc.clear() → abc 딕셔너리에 있는 모든 아이템 삭제

📝 리스트, 튜플, 딕셔너리 헷갈리지 않게 잘 정리해야겠다.
어떤 상황에 어떤 자료구조를 선택할지 판단할 수 있게 연습이 필요할 것 같다.

▷ 내일 학습 계획: 자료구조 강의(문풀 1~3), 알고리즘 강의(1~2)

[이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.]

0개의 댓글