제로베이스 데이터 스쿨/일일 스터디 노트

14일차 스터디노트 / 파이썬 자료구조, 튜플 자료형과 딕셔너리 자료형의 활용

김뎀뎀 2023. 1. 18. 19:43

※제로베이스 데이터 취업스쿨 11기 수강 중

 

📗 14일차 공부 내용 요약

[ 파이썬 자료 구조 ]

튜플(Tuple) 자료형의 개념과 여러 활용 법들을 알아보았다.

 

1. 튜플 자료형

2. 튜플 결합

3. 튜플 슬라이싱

4. 튜플 아이템 정렬

5. 튜플과 반복문

 

딕셔너리(Dictonary) 자료형의 개념과 여러 활용법들을 알아보았다.

 

1.딕셔너리 자료형

2.딕셔너리 추가와 수정

3. keys()와 values()

4.딕셔너리 삭제

5.딕셔너리 유용한 기능

 

 


📖  14일차 공부 내용 자세히

< 튜플(Tuple) 자료형 >

1. 튜플 자료형

 

■  튜플

  • 리스트(List)와 비슷하지만 아이템 변경이 블가하다
  • ( )를 이용해서 선언하고, 데이터구분은 ‘ , ‘을 이용한다
  • 숫자, 문자(열), 논리형 등 모든 기본 데이터를ㄹ 같이 저장할 수 있다
  • 튜플에 또 다른 컨테이너 자료형 데이터를 저장할 수 도 있다
students = ('홍길동', '박찬호', '이용규', '박승철', '김지은')

strs = (3.14, '십', 20, 'one', '3.141592')

datas = (10, 20, 30, (40, 50, 60))

 

■  튜플 아이템 조회

  • 튜플도 리스트와 마찬가지로 아이템에 자동으로 부여되는 번호표, 인덱스가 있다
  • 튜플 아이템은 인덱스를 이용해서 조회 가능하다
datas = (10, 20, 30, (40, 50, 60))

print('datas[0]: {}'.format(datas[0])) #10
print('datas[1]: {}'.format(datas[1])) #20
print('datas[2]: {}'.format(datas[2])) #30
print('datas[3]: {}'.format(datas[3])) #(40. 50. 60)

print('datas[3][0]: {}'.format(datas[3][0])) #40
print('datas[3][1]: {}'.format(datas[3][1])) #50
print('datas[3][2]: {}'.format(datas[3][2])) #60

 

■  in과 not in 키워드

  • in, not in 키워드를 이용하면 아이템의 존재 유/무를 알 수 있다
    • in : 있으면 True, 없으면 False가 반환
    • not in : 없으면 True, 있으면 True가 반환
  • in, not in 키워드는 문자열에서도 사용 가능하다
studentsTuple = ('홍길동', '박찬호', '이용규', '박승철', '김지은')

searchName = input('학생 이름 입력: ')
if searchName in studentsTuple:
    print('{} 학생은 우리반 학생입니다.'.format(searchName))
else:
    print('{} 학생은 우리반 학생이 아닙니다.'.format(searchName))

 

■  튜플 길이

  • 리스트와 마찬가지로, 튜플에 저장된 아이템 개수를 튜플 길이라고 한다
  • len()과 반복문을 이용하면 튜플의 아이템 조회가 가능하다
students = ('홍길동', '박찬호', '이용규', '박승철', '김지은')
sLength = len(students)
print(sLength) #5

#for문으로 아이템 조회
for i in range(len(students)):
    print('students[{}] : {}'.format(i, students[i]))

#while문으로 아이템 조회
n = 0
sLength = len(students)
while n < sLength:
    print('students[{}] : {}'.format(n, students[n]))
    n += 1

 

■  리스트와 튜플

  • 튜플은 리스트와 달리 아이템 추가, 변경, 삭제가 불가하다
  • 튜플은 선언 시 괄호 생략이 가능하다
  • 리스트와 튜플은 자료형 변환이 가능하다
#튜플 () 생략 해 선언
students = '홍길동', '박찬호', '이용규', '강호동'
print(type(students)) #<class 'tuple'>

#튜플, 리스트 자료형 변환
students = ['홍길동', '박찬호', '이용규', '강호동']
students = tuple(students)
print(type(students)) #<class 'tuple'>

students = list(students)
print(type(students))<class 'list'>

 

2. 튜플  결합

    • 덧셈을 활용해 2개의 튜플을 결합 할 수 있다
  • 리스트에서 사용할 수 있는 extend()함수를 튜플에서는 사용할 수 없다
    • extend()는 기존의 리스트를 연장하는 것이기 때문에, 수정이 불가한 튜플은 사용 불가
    • 덧셈을 활용한 결합은 새로운 튜플이 생성되는 것이기 때문에 괜찮음
  • ( num , ) → 튜플로 바뀐다, 콤마를 찍는 것이 중요!
studentTuple1 = ('홍길동', '박찬호', '이용규')
studentTuple2 = ('박승철', '김지은', '강호동')

studentTuple3 = studentTuple1 + studentTuple2
print(studentTuple3)

#('홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동')

 

3. 튜플 슬라이싱

  • 리스트와 마찬가지로 [ n : m ]을 이용하면 리스트에서 원하는 아이템을 뽑아낼 수 있다
  • 슬라이싱할 때 [ n : m : r ] r을 통해 단계를 설정할 수 있다
  • 튜플은 슬라이싱을 이용해서 아이템을 변경할 수 없다
  • 리스트를 튜플을 활용해 변경할 수는 있다
  • slice()함수를 이용해서 아이템을 슬라이싱할 수 있다
students = ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')
print('students: {}'.format(students[2:4]))
print('students: {}'.format(students[:4]))
print('students: {}'.format(students[2:]))
print('students: {}'.format(students[2:-2]))
print('students: {}'.format(students[-5:-2]))

#단계 설정
numbers = (2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14)
print('numbers: {}'.format(numbers[2:-2:2]))
print('numbers: {}'.format(numbers[:-2:2]))
print('numbers: {}'.format(numbers[::2]))

#리스트의 아이템 튜플 아이템으로 변경
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']

students[1:4] = ('park chanho', 'lee yonggyu', 'gang hodong')
print('students : {}'.format(students))

#슬라이스 함수
students = ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')

print('students: {}'.format(students[slice(2, 4)]))
print('students: {}'.format(students[slice(4)]))
print('students: {}'.format(students[slice(2, len(students))]))
print('students: {}'.format(students[slice(2, len(students)-2)]))
print('students: {}'.format(students[slice(len(students)-5, len(students)-2)]))

 

4. 튜플 아이템 정렬

  • 튜플은 수정이 불가하기 때문에 리스트로 변환한 후 정렬하자
  • sorted()함수를 이용하면 튜플도 정렬 할 수 있다
    • sorted(튜플 자료)
    • sorted()함수는 리스트 자료형을 반환한다.
students = ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')
students = list(students)
students.sort()
print('students: {}'.format(students))

--
#sorted() 함수 활용

students = ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')
sortedStudents = sorted(students)
print('sortedStudents type: {}'.format(type(sortedStudents)))
print('sortedStudents: {}'.format(sortedStudents))
'''
students: ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')
sortedStudents type: <class 'list'>
'''

 

5. 튜플과 반복문

 

■  튜플과 for 문

  • for문을 이용하면 튜플의 아이템을 자동으로 참조할 수 있다
  • for문을 이용하면, 튜플 내부에 또 다른 튜플의 아이템을 조회할 수 있다
#for문으로 아이템 조회
cars = '그랜저', '소나타', '말리부', '카니발', '쏘렌토'

for i in range(len(cars)):
    print(cars[i])

for car in cars:
    print(car)

#튜플 내부에 또 다른 튜플 아이템 조회
studentCnts = (1, 19), (2, 20), (3, 22), (4, 18), (5, 21)

for i in range(len(studentCnts)):
    print('{}학급 학생수: {} '.format(studentCnts[i][0], studentCnts[i][1]))

for classNo, cnt in studentCnts:
    print('{}학급 학생수: {}'.format(classNo, cnt))

 

■  튜플과 while문

  • while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다
cars = ('그랜저', '소나타', '말리부', '카니발', '쏘렌토')

#첫번째 방법
n = 0
while n < len(cars):
    print(cars[n])
    n += 1

#두번째 방법
n = 0
flag = True
while flag:
    print(cars[n])
    n += 1

    if n == len(cars):
        flag = False

#세번째 방법
n = 0
while True:
    print(cars[n])
    n += 1

    if n == len(cars):
        break

#튜플 내부에 튜플이 있는 경우
studentCnts = (1, 19), (2, 20), (3, 22), (4, 18), (5, 21)

n = 0
while n < len(studentCnts):
    print('{}학급 학생수: {} '.format(studentCnts[n][0], studentCnts[n][1]))
    n += 1

 

 

< 딕셔너리 자료형>

1. 딕셔너리 자료형

  • 딕셔너리는 키(key) 값을 이용해서 조회한다
    • 딕셔너리명[키]
  • 존재하지 않는 키를 이용한 조회 시 에러가 발생한다
  • get(key)를 이용해서 값(value)을 조회할 수 있다
    • get()은 key가 없어도 에러가 발생하지 않는다.
    • students.get(키값)
students = {'s1':'문동은', 's2':'박연진', 's3':'이사라', 's4':['전재준','손명오']}

print(students['s1']) #문동은
print(students['s2']) #박연진
print(students['s3']) #이사라
print(students['s4'][0]) #전재준
print(students['s4'][1]) #손명오
print(students.get('s5')) #None

 

 

2. 딕셔너리 추가와 수정

 

■  딕셔너리 추가

  • 딕셔너리이름[키(key)] = 값(value) 형태로 아이템을 추가한다
  • 추가하려는 키가 이미 있다면 기존 값이 변경된다
myInfo = {}

myInfo['이름'] = '박경진'
myInfo['전공'] = 'computer'
myInfo['메일'] = 'jin@naver.com'
myInfo['학년'] = 3
myInfo['주소'] = '대한민국 서울'
myInfo['취미'] = ['요리', '여행']

print(myInfo)

'''
{'이름': '박경진', '전공': 'computer', '메일': 'jin@naver.com', '학년': 3, '주소': '대한민국 서울', '취미': ['요리', '여행']}
'''

 

■  딕셔너리 수정

  • 딕셔너리이름[키(key)] = 값(value) 형태로 아이템을 수정한다
#학생의 시험 점수가 60점 미만이면 'f(재시험)'으로 값을 변경해보자.
scores = {'kor':88, 'eng':55, 'mat':85, 'sci':57, 'his':82}
print(f'scores : {scores}')

minScore = 60
fStr = 'F(재시험)'
if scores['kor'] < minScore: scores['kor'] = fStr
if scores['eng'] < minScore: scores['eng'] = fStr
if scores['mat'] < minScore: scores['mat'] = fStr
if scores['sci'] < minScore: scores['sci'] = fStr
if scores['his'] < minScore: scores['his'] = fStr
print(f'scores : {scores}')

 

3. key( )와 values( )

  • keys(), values(), item() 을 통해 전체 키, 값, 아이템을 조회할 수 있다
memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}

# keys()
ks = memInfo.keys()
print(ks)       #d ict_keys(['이름', '메일', '학년', '취미'])
print(type(ks)) # <class 'dict_keys'>

#values()
vs = memInfo.values()
print(vs)       # dict_values(['홍길동', 'gildong@gmail.com', 3, ['농구', '게임']])
print(type(vs)) # <class 'dict_values'>

#items()
items = memInfo.items()
print(items)       # dict_items([('이름', '홍길동'), ('메일', 'gildong@gmail.com'), ('학년', 3), ('취미', ['농구', '게임'])])
print(type(items)) # <class 'dict_items'>

 

  • for 문을 이용한 딕셔너리 조회
for key in memInfo.keys(): # .keys()가 리스트는 아니지만, 반복성이 있는 객체라 for사용가능
    print(f'{key}: {memInfo[key]}')

'''
이름: 홍길동
메일: gildong@gmail.com
학년: 3
취미: ['농구', '게임']
'''

 

4. 딕셔너리 삭제

  • del과 key를 이용한 item 삭제
    • del 딕셔너리명[키(key)]
memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}

del memInfo['메일']
print(memInfo) #{'이름': '홍길동', '학년': 3, '취미': ['농구', '게임']}

del memInfo['취미']
print(memInfo) #{'이름': '홍길동', '학년': 3}

 

  • pop()와 key를 이용한 item 삭제
    • 딕셔너리명.pop(키)
    • 삭제되면서 value를 반환한다
memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}

returnValue = memInfo.pop('이름')
print(memInfo)     #{'메일': 'gildong@gmail.com', '학년': 3, '취미': ['농구', '게임']}
print(returnValue) #홍길동

returnValue = memInfo.pop('취미')
print(memInfo)     #{'메일': 'gildong@gmail.com', '학년': 3}
print(returnValue) #['농구', '게임']

 

 

 

5. 딕셔너리 유용한 기능

 

■  in, not in

  • 키(key) 존재 유무를 판단한다
memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}

print('이름' in memInfo) #True
print('메일' in memInfo) #True

print('grade' not in memInfo) #True
print('hobby' not in memInfo) #True

 

■  len ( )

  • 딕셔너리 길이(아이템 개수)를 알 수 있다
memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}
print(len(memInfo)) #4

 

■  clear ( )

  • 모든 아이템을 삭제한다
memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}
print(len(memInfo)) #4

➰ 14일차 후기

어제 배운 리스트 자료형의 내용들과 유사해서 수월했던 오늘..! 

빠르게 오늘 분량을 끝냈만큼 그동안 못했던 복습을 해야겠다.

새로운 것 배우는 것보다, 복습이 더 쉽지 않다니 ~


※본 내용은 제로베이스 데이터 취업 스쿨에서 제공하는 학습 내용에 기반합니다.