데이터를 묶어서 관리하자!
파이썬의 다양한 자료구조를 이해하자!
student1 = '홍길동'
student2 = '박찬호'
student3 = '이용규'
student4 = '박승철'
student5 = '김지은'
-> '홍길동', '박찬호', '이용규', '박승철', '김지은'
: 5개의 변수를 선언해서 따로 관리 -> 묶어서 관리 = 컨테이너 자료형(종류마다 데이터 관리방식, 구조가 약간씩 다르다)
리스트 : 가장 많이 쓰임. 데이터를 언제든 바꿀 수 있음.
튜플: 리스트와 거의 비슷. 한번 데이터가 정해지면 바꿀 수 없음
딕셔너리: key값과 value값으로 이루어짐
셋트: 중복된 데이터가 존재x
student1 = '홍길동'
student2 = '박찬호'
student3 = '이용규'
student4 = '박승철'
student5 = '김지은' #단일 데이터 ; 변수
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은'] #데이터구분은 , / 컨테이너 안에 데이터가 5개 들어가있다
print(student1)
print(students)
print(type(student1))
print(type(students))
for student in students:
print(student)
students = ('홍길동', '박찬호', '이용규', '박승철', '김지은') #()
print(type(students))
scores = {'kor':95, 'eng':80, 'mat': 100}
print(type(scores))
allSales = {100, 200, 500, 200}
print(allSales)
print(type(allSales))
-->
홍길동
['홍길동', '박찬호', '이용규', '박승철', '김지은']
<class 'str'>
<class 'list'>
홍길동
박찬호
이용규
박승철
김지은
<class 'tuple'>
<class 'dict'>
{200, 100, 500}
<class 'set'>
데이터를 줄세우자!
student = '홍길동'
print('student: {}'.format(student))
print(type(student))
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
#리스트 명시위해 []가 나오고, 아이템이 그대로 출력됨
# '김지은' = 아이템(요소)
print('students: {}'.format(students))
print(type(students))
numbers = [10, 20, 30, 40, 50, 60, 70]
print('numbers: {}'.format(numbers))
print(type(numbers))
strs = [3.14, '십', 20, 'one', '3.141592']
# 숫자, 문자(열), 논리형 등 모든 기본데이터를 같이 저장할 수 있다.
print('strs: {}'.format(strs))
print(type(strs))
-->
student: 홍길동
<class 'str'>
students: ['홍길동', '박찬호', '이용규', '박승철', '김지은']
<class 'list'>
numbers: [10, 20, 30, 40, 50, 60, 70]
<class 'list'>
strs: [3.14, '십', 20, 'one', '3.141592']
<class 'list'>
datas = [10, 20, 30, [40, 50, 60]]
# 리스트에 또 다른 컨테이너 자료형 데이터를 저장할 수도 있다.
myFamilyNames = ['기아빠', '윤엄마', '기하은', '기동생']
print(myFamilyNames)
-->
['기아빠', '윤엄마', '기하은', '기동생']
todaySchedule = ['10시: 업무회의', '12시: 친구와 점약',
'3시: 자료정리', '6시: 운동', '9시: 요리']
print(todaySchedule)
-->
['10시: 업무회의', '12시: 친구와 점약', '3시: 자료정리', '6시: 운동', '9시: 요리']
리스트의 아이템을 조회하자!
['홍길동', '박찬호', '이용규', '박승철', '김지은']
0 , 1 , 2 , 3 , 4
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
print(students[0]) #인덱스이용
print(students[1]) #인덱스이용
print(students[2]) #인덱스이용
print(students[3]) #인덱스이용
print(students[4]) #인덱스이용
print(type(students))
print(type(students[0]))
numbers = [10, 20, 30, 40, 50, 60, 70]
print(numbers[0])
print(type(numbers))
print(type(numbers[0]))
-->
홍길동
박찬호
이용규
박승철
김지은
<class 'list'>
<class 'str'>
10
<class 'list'>
<class 'int'>
students = ['김성예', '신경도', '박기준', '최승철', '황동석']
for i in range(5): #끝까지
if i % 2 == 0: #짝수
print('인덱스가 짝수인 경우 - students[{}]: {}'.format(i, students[i]))
else:
print('인덱스가 홀수인 경우 - students[{}]: {}'.format(i, students[i]))
-->
인덱스가 짝수인 경우 - students[0]: 김성예
인덱스가 홀수인 경우 - students[1]: 신경도
인덱스가 짝수인 경우 - students[2]: 박기준
인덱스가 홀수인 경우 - students[3]: 최승철
인덱스가 짝수인 경우 - students[4]: 황동석
리스트의 아이템 개수를 확인하자!
students = ['김성예', '신경도', '박기준', '최승철', '황동석']
= 리스트 길이: 5
len 함수의 매개변수로 리스트를 씀.
sLength = len(students)
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
print(students)
sLength = len(students)
print(sLength)
-->
['홍길동', '박찬호', '이용규', '박승철', '김지은']
5
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
sLength = len(students)
* for 문
for i in range(len(students)):
print(students[i])
* while 문
n = 0
while n < sLength:
print('n: {}'.format(n))
print('students[{}] : {}'.format(n, students[n]))
n += 1
-->
홍길동
박찬호
이용규
박승철
김지은
n: 0
students[0] : 홍길동
n: 1
students[1] : 박찬호
n: 2
students[2] : 이용규
n: 3
students[3] : 박승철
n: 4
students[4] : 김지은
str = 'hello python'
print(len(str))
-->
12
myFavoriteSports = ['수영', '배구', '조깅', '야구']
# 1
for i in range(len(myFavoriteSports)):
print(myFavoriteSports[i])
# 2
for item in myFavoriteSports:
print(item)
# 3
n = 0
while n < len(myFavoriteSports):
print(myFavoriteSports[n])
n += 1
-->
수영
배구
조깅
야구
for문을 이용해서 리스트 아이템을 참조하자!
cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']
# 1
for i in range(len(cars)): #0부터 시작해서 들어가서 조회
print(cars[i])
# 2
for car in cars: #아이템이 하나씩 들어가서 조회
print(car)
-->
그랜저
소나타
말리부
카니발
쏘렌토
리스트 안에 변수를 두개 주면, 순서대로 값을 가리킴.
studentsCnts = [[1, 19], [2, 20], [3, 22], [4, 18], [5, 21]]
#for i in range(len(studentsCnts)):
# print('{}학급 학생수: {}'.format(studentsCnts[i][0], studentsCnts[i][1]))
for classNo, cnt in studentsCnts:
print('{}학급 학생수: {}'.format(classNo, cnt))
-->
1학급 학생수: 19
2학급 학생수: 20
3학급 학생수: 22
4학급 학생수: 18
5학급 학생수: 21
studentCnts = [[1, 18], [2, 19], [3, 23], [4, 21], [5, 20], [6, 22], [7, 17]]
sum = 0
avg = 0
for classNo, cnt in studentCnts:
print('{}학급 학생 수: {}'.format(classNo, cnt))
sum += cnt
print('전체 학생 수: {}명'.format(sum))
print('평균 학생 수: {}명'.format(sum / len(studentCnts)))
-->
1학급 학생 수: 18
2학급 학생 수: 19
3학급 학생 수: 23
4학급 학생 수: 21
5학급 학생 수: 20
6학급 학생 수: 22
7학급 학생 수: 17
전체 학생 수: 140명
평균 학생 수: 20.0명
minScore = 60
scores = [['국어', 58],
['수학', 89],
['영어', 77],
['과학', 99],
['국사', 50]]
# 1
for item in scores:
if item[1] < minScore:
print('과락 과목: {}, 점수: {}'.format(item[0], item[1]))
# 2
for subject, score in scores:
if score < minScore:
print('과락 과목: {}, 점수: {}'.format(subject, score))
#3
for subject, score in scores:
if score >= minScore: continue
print('과락 과목: {}, 점수: {}'.format(subject, score))
-->
과락 과목: 국어, 점수: 58
과락 과목: 국사, 점수: 50
minScore = 60
korScore = int(input('국어 점수: '))
engScore = int(input('영어 점수: '))
matScore = int(input('수학 점수: '))
sciScore = int(input('과학 점수: '))
hisScore = int(input('국사 점수: '))
scores = [['국어', korScore],
['영어', engScore],
['수학', matScore],
['과학', sciScore],
['국사', hisScore]]
for subject, score in scores:
if score < minScore:
print('과락 과목: {}, 점수: {}'.format(subject, score))
-->
국어 점수: 80
영어 점수: 59
수학 점수: 66
과학 점수: 70
국사 점수: 50
과락 과목: 영어, 점수: 59
과락 과목: 국사, 점수: 50
min = 0
max = 0
classes = [['1학급', 18],
['2학급', 19],
['3학급', 23],
['4학급', 21],
['5학급', 20],
['6학급', 22],
['7학급', 17]]
for classNo, student in classes:
if student < 18:
min = student
print('학생수가 가장 적은 학급(학생수): {}({}명)'.format(classNo, student))
elif student > 22:
max = student
print('학생수가 가장 많은 학급(학생수): {}({}명)'.format(classNo, student))
-->
학생수가 가장 많은 학급(학생수): 3학급(23명)
학생수가 가장 적은 학급(학생수): 7학급(17명)
출력은 했는데 ㅠㅠ 가장 많은, 가장 적은 을 어떻게 표현해야될지 모르겠음
다시 찾아올 것임
변수를 반, 학생수 각각 지정하고,
리스트에 있는 반 학생 수 기준으로 <, > 를 해줘야 하는 거였다
헷갈림
복습필요함
-->
classes = [['1학급', 18],
['2학급', 19],
['3학급', 23],
['4학급', 21],
['5학급', 20],
['6학급', 22],
['7학급', 17]]
minClassNo = 0
maxClassNo = 0
minStudent = 0
maxStudent = 0
for classNo, student in classes:
if minStudent == 0 or minStudent > student:
minClassNo = classNo
minStudent = student
if maxStudent < student:
maxClassNo = classNo
maxStudent = student
print('학생수가 가장 많은 학급(학생수): {}({}명)'.format(maxClassNo, maxStudent))
print('학생수가 가장 적은 학급(학생수): {}({}명)'.format(minClassNo, minStudent))
-->
학생수가 가장 많은 학급(학생수): 3학급(23명)
학생수가 가장 적은 학급(학생수): 7학급(17명)
while문을 이용한 리스트 아이템 참조!
cars = [['그렌저'], ['소나타'], ['말리부'], ['카니발'], ['쏘렌토']]
# 1
n = 0
while n < len(cars):
print(cars[n])
n += 1
# 2
n = 0
flag = True
while flag:
print(cars[n])
n += 1
if n == len(cars):
flag = False
# 3
n = 0
while True:
print(cars[n])
n += 1
if n == len(cars):
break
-->
['그렌저']
['소나타']
['말리부']
['카니발']
['쏘렌토']
studentCnts = [[1, 18],
[2, 19],
[3, 23],
[4, 21],
[5, 20],
[6, 22],
[7, 17]]
sum = 0
avg = 0
n = 0
while n < len(studentCnts):
classNo = studentCnts[n][0]
cnt = studentCnts[n][1]
print('{}학급 학생수: {}명'.format(classNo, cnt))
sum += cnt
n += 1
avg = sum / len(studentCnts)
print('전체 학생수: {}명'.format(sum))
print('평균 학생수: {}명'.format(avg))
-->
1학급 학생수: 18명
2학급 학생수: 19명
3학급 학생수: 23명
4학급 학생수: 21명
5학급 학생수: 20명
6학급 학생수: 22명
7학급 학생수: 17명
전체 학생수: 140명
평균 학생수: 20.0명
minScore = 60
scores = [['국어', 58],
['수학', 89],
['영어', 77],
['과학', 99],
['국사', 50]]
# 1
n = 0
while n < len(scores):
if scores[n][1] < minScore:
print('과락 과목: {}, 점수: {}'.format(scores[n][0], scores[n][1]))
n += 1
# 2
n = 0
while n < len(scores):
if scores[n][1] >= minScore:
n += 1
continue
print('과락 과목: {}, 점수: {}'.format(scores[n][0], scores[n][1]))
n += 1
-->
과락 과목: 국어, 점수: 58
과락 과목: 국사, 점수: 50
minScore = 60
korScore = int(input('국어 점수: '))
engScore = int(input('영어 점수: '))
matScore = int(input('수학 점수: '))
sciScore = int(input('과학 점수: '))
hisScore = int(input('국사 점수: '))
scores = [['국어', korScore],
['영어', engScore],
['수학', matScore],
['과학', sciScore],
['국사', hisScore]]
n = 0
while n < len(scores):
if scores[n][1] < minScore:
print('과락 과목: {}, 점수: {}'.format(scores[n][0], scores[n][1]))
n += 1
-->
국어 점수: 80
영어 점수: 69
수학 점수: 66
과학 점수: 70
국사 점수: 50
과락 과목: 국사, 점수: 50
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]:
minClassNo = studentCnts[n][0]
minCnt = studentCnts[n][1]
if maxCnt < studentCnts[n][1]:
maxClassNo = studentCnts[n][0]
maxCnt = studentCnts[n][1]
n += 1
print('학생수가 가장 적은 학급(학생수): {} ({}명)'.format(minClassNo, minCnt))
print('학생수가 가장 많은 학급(학생수): {} ({}명)'.format(maxClassNo, maxCnt))
-->
학생수가 가장 적은 학급(학생수): 7학급 (17명)
학생수가 가장 많은 학급(학생수): 3학급 (23명)
인덱스와 아이템을 한번에 조회하자!
sports = ['농구', '수구', '축구', '마라톤', '테니스']
# 1
for i in range(len(sports)):
print('{} : {}'.format(i, sports[i]))
# 2
for idx, value in enumerate(sports): #인덱스값, 아이템
print('{} : {}'.format(idx, value))
-->
0 : 농구
1 : 수구
2 : 축구
3 : 마라톤
4 : 테니스
str = 'hello python'
for idx, value in enumerate(str):
print('{} : {}'.format(idx, value))
-->
0 : h
1 : e
2 : l
3 : l
4 : o
5 :
6 : p
7 : y
8 : t
9 : h
10 : o
11 : n
sports = ['농구', '수구', '축구', '마라톤', '테니스']
favoriteSport = input('가장 좋아하는 스포츠 입력: ')
bestSportIdx = 0
for idx, value in enumerate(sports):
if value == favoriteSport:
bestSportIdx = idx + 1 #몇번째 있는지 알 수 있음. 번째니까 +1
print('{}(은)는 {}번째에 있습니다'.format(favoriteSport, bestSportIdx))
-->
가장 좋아하는 스포츠 입력: 마라톤
마라톤(은)는 4번째에 있습니다
message = input('메시지 입력: ')
cnt = 0
for idx, value in enumerate(message):
if value == ' ':
cnt += 1
print('공백 개수: {}'.format(cnt))
-->
메시지 입력: 오늘 시간이 빨리 지나갔어요 엉엉
공백 개수: 4