[데이터분석]파이썬 스터디노트 11

bin·2023년 2월 18일
0

파이썬

목록 보기
10/12
post-thumbnail

튜플: 리스트와 비슷하지만 아이템 추가/변경/삭제 불가

  • ()을 이용해서 선언하고 데이터 구분은 ‘,’을 이용
  • 튜플 아이템 조회: 인덱스
  • in, not in: 아이템 존재 유/무 판단
    in: 존재하면 true / 존재하지 않으면 false
    not in : 존재하지 않으면 True / 존재하면 false
import random

randNumber = random.sample(range(1,11),5)
userNumber = int(input('숫자 입력: '))
if userNumber in randNumber:
    print('빙고! ')
else: print('다음 기회에~')

튜플 결합: + 💥extend(): 튜플에서는 사용할 수 없음

myNumbers = (1,3,5,6,7)
friendNumbers = (2,3,5,8,10)

for number in friendNumbers:
    if number not in myNumbers:
        myNumbers += (number, )

print(myNumbers)

(number, ): 튜플로 변환

튜플슬라이싱: [n:m]/slice()함수

  • 튜플은 슬라이싱 이용해서 아이템 변경 불가
  • 리스트에 튜플 아이템으로 변경 가능
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철']
students[1:4] = ('park chanho', 'lee yonggyu', 'gang hodong')
print(type(students))  #-> list

리스트와 튜플 비교

  • 튜플은 선언시 괄호 생략 가능

자료형 변환: tuple(), list()

  • 튜플 아이템 추가/삭제/변경 필요하다면 리스트로 변환 -> 다시 튜플로 변환

튜플 정렬

  1. 리스트로 변환 후 정렬
  2. sorted() 함수
students = '홍길동', '박찬호', '이용규', '강호동', '박승철'
sortedStudents = sorted(students)
print(sortedStudents)

출력값: ['강호동', '박승철', '박찬호', '이용규', '홍길동'] (리스트형으로 변환)

for문을 이용한 참조(조회)

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 classNo, cnt in studentCnts:
    print('{}학급 학생수: {}'.format(classNo, cnt))

🔔 연습문제
Q. 학급별 학생수 가장 작은/많은 학급 출력

  1. for문
students = ((1,18),(2,19),(3,23),(4,21),(5,20))
minCnt = 0; maxCnt = 0
minClass = 0; maxClass = 0
for classNo, cnt in students:
    if minCnt == 0 or cnt < minCnt:
        minClass = classNo
        minCnt = cnt

    if cnt > maxCnt:
        maxClass = classNo
        maxCnt = cnt

print('학생 수가 가장 적은 학급(학생수): {}학급({}명)'.format(minClass, minCnt))
print('학생 수가 가장 많은 학급(학생수): {}학급({}명)'.format(maxClass, maxCnt))
  1. while문
students = ((1,18),(2,19),(3,23),(4,21),(5,20))
minCnt = 0; maxCnt = 0
minClass = 0; maxClass = 0

n=0
while n < len(students):
    if minCnt == 0 or students[n][1] < minCnt:
        minClass = students[n][0]
        minCnt = students[n][1]

    if students[n][1] > maxCnt:
        maxClass = students[n][0]
        maxCnt = students[n][1]

    n+=1

print('학생 수가 가장 적은 학급(학생수): {}학급({}명)'.format(minClass, minCnt))
print('학생 수가 가장 많은 학급(학생수): {}학급({}명)'.format(maxClass, maxCnt))

딕셔너리: 키(key)와 값(value)이용해서 자료 관리, 인덱스 존재x

  • {}를 이용해서 선언
  • 키: 값의 형태로 아이템 정의(키 – 중복 불가 / 값 – 중복 가능)
    Key에 immutable값은 올 수 있지만, mutable값(ex.리스트)은 올 수 없음

딕셔너리 조회

students = {'s1':'홍길동','s2':'박찬호','s3':'이용규','s4':'박승철'}
print(students['s1'])

-> 없는 key 조회: 에러

  • get()을 이용한 조회
students = {'s1':'홍길동','s2':'박찬호','s3':'이용규','s4':'박승철'}
print(students.get('s1'))

-> 없는 key 조회: 에러 발생x(출력값: None)

딕셔너리 추가/수정
딕셔너리이름[key]=value 형태로 아이템 추가/수정

students = {'s1':'홍길동','s2':'박찬호','s3':'이용규','s4':'박승철'}
students['s5']='박지호'
myInfo = {'이름':'홍길동','성별':'남','이메일':'gildong@naver.com'}
myInfo['이메일'] = 'gildong@gmail.com'

🔔연습문제
Q. 0부터 10까지의 각각의 정수에 대한 팩토리얼을 딕셔너리에 추가

factorialDic = {}
for i in range(11):
    if i == 0:
        factorialDic[i] = 1

    else:
        for j in range(1, i+1):
            factorialDic[i] = factorialDic[i-1]*j

🔔 연습문제
키는 하루에 0.01씩 커지고 몸무게는 0.3씩 줄어든다. 30일 후 BMI 구하기

myBodyInfo = {'이름':'gildong', '몸무게': 83, '신장':1.8}
myBMI = myBodyInfo['몸무게'] / (myBodyInfo['신장']**2)

date = 0
while True:
    date +=1

    myBodyInfo['몸무게'] -= 0.3
    print('몸무게: {}'.format(round(myBodyInfo['몸무게'], 2)))
    myBodyInfo['신장'] += 0.001
    print('신장: {}'.format(round(myBodyInfo['신장'], 2)))

    if date >=30:
        break

keys(): 키 조회/ values(): 값 조회

myInfo = {'이름':'홍길동', '성별':'남', '메일':'gildong@gmail.com'}
ks = myInfo.keys()
print(ks)
print(type(ks))
vs = myInfo.values()
print(vs)
print(type(vs))

출력값:
dict_keys(['이름', '성별', '메일'])
<class 'dict_keys'>
dict_values(['홍길동', '남', 'gildong@gmail.com'])
<class 'dict_values'>

for문을 이용한 조회

myInfo = {'이름':'홍길동', '성별':'남', '메일':'gildong@gmail.com'}

for key in myInfo.keys():
    print(f'{key} : {myInfo[key]}')
이름 : 홍길동
성별 : 남
메일 : gildong@gmail.com

🔔연습문제
시험점수가 60점 미만이면 F(재시험)으로 값을 변경하는 코드

scores = {'kor':88, 'eng':55, 'mat':85, 'sci':57, 'his':82}
minScore = 60
fStr = 'F 재시험'
fDic = {}  #f학점만 모아둔 딕셔너리

for key in scores.keys():
    if scores[key] < minScore:
        scores[key] = fStr
        fDic[key] = fStr

print(scores)
print(fDic)

삭제: del키워드 / pop()

🔔 연습문제
딕셔너리에 저장된 점수 중 최저, 최고점수 삭제하는 프로그램

scores = {'score1':8.9, 'score2':8.1, 'score3':8.5, 'score4':9.8, 'score5':8.8}

minScore = 0 ; minScoreKey = '' ; maxScore= 0 ; maxScoreKey = ''

for key in scores.keys():
    if minScore == 0 or scores[key] < minScore:
        minScore = scores[key]
        minScoreKey = key

    if scores[key] > maxScore:
        maxScore = scores[key]
        maxScoreKey = key

del scores[minScoreKey]
del scores[maxScoreKey]

기타 유용한 기능들

  • In/not in : 키(key) 존재 유/무 판단
myInfo = {'이름':'홍길동', '성별':'남', '메일':'gildong@gmail.com'}
print('이름' in myInfo)   # -> True
  • len(): 딕셔너리 길이(아이템 개수)
  • clear(): 모든 아이템 삭제

🔔연습문제
개인정보에 연락처, 주민등록번호가 있다면 삭제하는 코드

myInfo = {'이름':'홍길동', '성별':'남', '메일':'gildong@gmail.com', '연락처':'010-1234-5678', '주민등록번호':'000101-1234567'}
deleteItems = ['연락처','주민등록번호']
for item in deleteItems:
    if item in myInfo:
        del myInfo[item]

0개의 댓글