여러 개의 데이터가 묶여있는 자료형을 컨테이너 자료형이라고 하고, 이러한 컨테이너 자료형의 데이터 구조를 자료구조라고 한다.
자료구조는 각각의 컨테이너 자료형에 따라서 차이가 있으며, 파이썬의 대표적인 컨테이너 자료형으로는 리스트(List), 튜플(Tuple), 딕셔너리(Dic), 셋트(Set)가 있다.
배열과 같이 여러 개의 데이터를 나열한 자료구조
'[]'를 이용해서 선언하고, 데이터 구분은 ','를 이용한다.
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
numbers = [10, 20, 30, 40, 50, 60, 70]
strs = [3.14, '십', 20, 'one', '3.141592']
datas = [10, 20, 30, [40, 50, 60]]
가족 이름을 리스트에 저장하고 출력해보기
myFamilyNames = ['홍아빠', '홍엄마', '홍길동', '홍동생']
print(myFamilyNames)
=> ['홍아빠', '홍엄마', '홍길동', '홍동생']
오늘 일정을 리스트에 저장하고 출력해보기
todaySchedule = ['10시-업무회의',
'12시-친구와 점심약속',
'3시-자료정리',
'6시-운동',
'9시-TV시청']
print(todaySchedule)
=> ['10시-업무회의', '12시-친구와 점심약속', '3시-자료정리', '6시-운동', '9시-TV시청']
인덱스란, 아이템에 자동으로 부여되는 번호표
리스트 아이템은 인덱스를 이용해서 조회 가능하다.
students = ['박찬호', '홍길동', '이용규', '박승철', '김지은']
print(students[0])
print(students[1])
print(students[2])
print(students[3])
print(students[4])
=> 박찬호
홍길동
이용규
박승철
김지은
students = ['김성예', '신경도', '박기준', '최승철', '황동석']
print('-- 인덱스가 짝수인 학생 --')
print('students[0] : {}' .format(students[0]))
print('students[2] : {}' .format(students[2]))
print('students[4] : {}' .format(students[4]))
print('-- 인덱스가 홀수인 학생 --')
print('students[1] : {}' .format(students[1]))
print('students[3] : {}' .format(students[3]))
-- 인덱스가 짝수인 학생 --
students[0] : 김성예
students[2] : 박기준
students[4] : 황동석
-- 인덱스가 홀수인 학생 --
students[1] : 신경도
students[3] : 최승철
students = ['김성예', '신경도', '박기준', '최승철', '황동석']
for i in range(5):
if i % 2 == 0:
print('인덱스가 짝수인 경우: --> student[{}]: {}'. format(i, students[i]))
else:
print('인덱스가 홀수인 경우: --> student[{}]: {}'. format(i, students[i]))
리스트 길이란, 리스트에 저장된 아이템 개수를 뜻한다.
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
sLength = len(students)
print('length of students : {}' .format(sLength))
length of students : 5
len()과 반복문을 이용하면 리스트의 아이템 조회가 가능하다.
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
sLength = len(students)
for i in range(len(students)):
print('i : {}' .format(i))
print('students[{}] : {}' .format(i, students[i]))
len()함수는 리스트의 개수뿐만 아니라 문자열의 길이도 알 수 있다.
str = 'Hello python!!'
print('\'Hello python!!\'의 길이 : {}' .format(len(str)))
'Hello python!!'의 길이 : 14
#1
cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']
for i in range(len(cars)):
print(cars[i])
#2
cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']
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))
1학습 학생 수 : 19
2학습 학생 수 : 20
3학습 학생 수 : 22
4학습 학생 수 : 18
5학습 학생 수 : 21
for문과 if문을 이용해서 과락 과목 출력하기
minScore = 60
scores = [
['국어', 58],
['영어', 77],
['수학', 89],
['과학', 99],
['국사', 50]]
for item in scores:
if item[1] < minScore:
print('과락 과목: {}. 점수: {}' .format(item[0], item[1]))
minScore = 60
scores = [
['국어', 58],
['영어', 77],
['수학', 89],
['과학', 99],
['국사', 50]]
for subject, score in scores:
if score < minScore:
print('과락 과목: {}. 점수: {}' .format(subject, score))
#continue 이용
for subject, score in scores:
if score >= minScore: continue
print('과락 과목: {}, 점수: {}' .format(subject, score))
사용자가 국어, 영어, 수학, 과학, 국사 점수를 입력하면 과락 과목과 점수를 출력하는 프로그램 만들기
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))
whilie문을 이용하면 다양한 방법으로 아이템 조회가 가능하다.
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
print('전체 학생 수: {}명' .format(sum))
print('평균 학생 수: {}명' .format(sum / len(studentCnts)))
while문과 if문을 이용해서 과락 과목 출력하기
minScore = 60
scores = [
['국어', 58],
['영어', 77],
['수학', 89],
['과학', 99],
['국사', 50]]
n = 0
while n < len(scores):
if scores[n][1] < minScore:
print('과락 과목: {}, 점수: {}' .format(scores[n][0], scores[n][1]))
n += 1
#continue 이용
n = 0
while n < len(scores):
if scores[n][1] >= minScore:
n += 1
continue
print('과락 과목: {}, 점수: {}' .format(scores[n][0], scores[n][1]))
n += 1
while문을 이용해서 학급 학생 수가 가장 작은 학급과 가장 많은 학급을 출력해보자.
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))
enumerate() 함수를 이용하면 아이템을 열거할 수 있다.
sports = ['농구', '수구', '축구', '마라톤', '테니스']
for i in range(len(sports)):
print('{} : {}' .format(i, sports[i]))
#range(len(sports))를 간편하게 쓰기 위해 enumerate() 함수 사용
for idx, value in enumerate(sports):
print('{} : {}' .format(idx, value))
0 : 농구
1 : 수구
2 : 축구
3 : 마라톤
4 : 테니스
enumerate()는 문자열에도 적용할 수 있다.
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
12 : .
가장 좋아하는 스포츠가 몇 번째에 있는지 출력하는 프로그램을 만들어보자.
sports = ['농구', '수구', '축구', '마라톤', '테니스']
favoritesport = input('가장 좋아하는 스포츠 입력: ')
bestSportIdx = 0
for idx, value in enumerate(sports):
if value == favoritesport:
bestSportIdx = idx + 1
print('{}(은)는 {}번째에 있습니다.' .format(favoritesport, bestSportIdx))