컨테이너 자료형 : 여러 개의 데이터가 묶여있는 자료형
자료구조 : 컨테이너 자료형의 데이터 구조
파이썬의 컨테이너 자료형 : 리스트(List), 튜플(Tuple), 딕셔너리(Dic), 셋트(Set)
List -> students = ['박병찬', '기상호', '성준수', '최종수', '허창현']
Tuple -> sports = ('농구', '야구', '배구', '골프', '테니스')
Dic -> scores = {'kor':88, 'eng':91, 'mat':95, 'sci':90, 'his':100}
Set -> allSales = {100, 150, 90, 110}
튜플은 한 번 데이터가 정해지면 바꿀 수 없음. 리스트는 수정 가능.
딕셔너리는 키값과 그에 해당하는 value값으로 이루어짐
셋트는 중복된 데이터가 허용되지 않음. 리스트는 중복데이터 존재가능.
sLength = len(students)
print(sLength) -> 5
students = ['기상호', '박병찬', '최종수', '성준수', '전영중']
for i in range(len(students)):
print('i : {}'.format(i))
print('students[{}]: {}'.format(i, students[i]))
students = ['기상호', '박병찬', '최종수', '성준수', '전영중']
n = 0
sLength = len(students)
while n < sLength:
print('n: {}'.format(n))
print('students[{}]: {}'.format(n, students[n]))
n += 1
str = 'Hello python!!'
print(len(str)) # 공백 포함 계산 -> 14 출력
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 classNo, cnt in studentCnts:
print('{}학급 학생 수 : {}'.format(classNo, cnt))
for i in range(len(studentCnts)):
print('{}학급 학생 수 : {}'.format(studentCnts[i][0], studentCnts[i][1]))
-> '1학급 학생 수 : 19' 이런식으로 출력됨
minScore = 60
scores = [
['국어', 58],
['영어', 77],
['수학', 89],
['과학', 99],
['국사', 50]]
for item in scores:
if item[1] < minScore:
print('과락 과목: {}, 점수: {}'.format(item[0], item[1]))
for subject, score in scores:
if score < minScore:
print('과락 과목: {}, 점수: {}'.format(subject, score))
for subject, score in scores:
if score >= minScore: continue
# continue를 만나면 이하 실행문X 다시 반복문으로 돌아감
print('과락 과목: {}, 점수: {}'.format(subject, score))
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:
maxClassNo = classNo
maxCnt = cnt
print('학생 수가 가장 적은 학급(학생수): {}학급({}명)'.format(minClassNo, minCnt))
print('학생 수가 가장 적은 학급(학생수): {}학급({}명)'.format(maxClassNo, maxCnt))
-> 어렵!! 혼자 다시 풀어보기
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
studentsCnts = [
[1, 18],
[2, 19],
[3, 23],
[4, 21],
[5, 20],
[6, 22],
[7, 17]
]
sum = 0
avg = 0
n = 0
while n < len(studentsCnts):
classNo = studentsCnts[n][0]
cnt = studentsCnts[n][1]
print('{}학급 학생수: {}명'.format(classNo, cnt))
sum += cnt
n += 1
avg = int(sum / len(studentsCnts))
print('전체 학생 수: {}명'.format(sum))
print('평균 학생 수: {}명'.format(avg))
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
n = 0
while n < len(scores):
if scores[n][1] >= minScore:
n += 1
continue
print('과락 과목: {}, 점수: {}'.format(scores[n][0], scores[n][1]))
n += 1
studentCnts = [
[1, 18],
[2, 19],
[3, 23],
[4, 21],
[5, 20],
[6, 22],
[7, 17]
]
minClassNo = 0; minStuCnt = 0
maxClassNo = 0; maxStuCnt = 0
n = 0
while n < len(studentCnts):
if minStuCnt == 0 or minStuCnt > studentCnts[n][1]:
minStuCnt = studentCnts[n][1]
minClassNo = studentCnts[n][0]
if maxStuCnt < studentCnts[n][1]:
maxStuCnt = studentCnts[n][1]
maxClassNo = studentCnts[n][0]
n += 1
print('학생 수가 가장 적은 학급(학생수): {}학급({}명)'.format(minClassNo, minStuCnt))
print('학생 수가 가장 많은 학급(학생수): {}학급({}명)'.format(maxClassNo, maxStuCnt))
sports = ['농구', '수구', '축구', '마라톤', '테니스']
for i in range(len(sports)):
print('{} : {}'.format(i, sports[i]))
for idx, value in enumerate(sports):
print('{} : {}'.format(idx, value)) #위와 똑같은 결과가 나옴
str = 'Hello python.'
for idx, value in enumerate(str):
print('{} : {}'.format(idx, value))
-> 각 문자열(공백포함)을 하나하나 순서대로 인덱스를 알려줌
sports = ['농구', '수구', '축구', '마라톤', '테니스']
favoriteSport = input('가장 좋아하는 스포츠 입력: ')
favoriteSportIdx = 0
for idx, value in enumerate(sports):
if value == favoriteSport:
favoriteSportIdx = idx + 1 # 인덱스는 0부터 시작하기 때문에 1을 더해줌
print('{}는 {}번째에 있습니다.'.format(favoriteSport, favoriteSportIdx))
message = input('메시지 입력: ')
cnt = 0
for idx, value in enumerate(message):
if value == ' ':
cnt += 1
print('공백 개수: {}'.format(cnt))
students = ['기상호', '박병찬', '최종수', '성준수', '전영중']
students.append('허창현')
-> 리스트의 길이(len)와 (추가된)마지막 아이템의 인덱스가 1 증가됨
scores = [['국어', 88], ['영어', 91]]
scores.append(['수학', 96])
students = ['기상호', '박병찬', '최종수', '성준수', '전영중']
students.insert(3, '허창현')
-> ['기상호', '박병찬', '최종수', '허창현', '성준수', '전영중']
-> '허창현'이 인덱스3에 들어가고 뒤에 아이템들은 하나씩 인덱스가 밀림(늘어남)
words = ['I', 'a', 'boy.']
words.insert(1, 'am')
for word in words:
print('{} '.format(word), end='')
-> 'I am a boy.' 출력
numbers = [1, 3, 6, 11, 45, 54, 62, 74, 85]
inputNumber = int(input('숫자 입력: '))
insertIdx = 0
for idx, number in enumerate(numbers):
print(idx, number)
if insertIdx == 0 and inputNumber < number: # insertIdx에는 딱 한번만 들어오고 끝남 (0일때만 if문을 하도록 설정했기때문)
insertIdx = idx
# 입력한 숫자가 number보다 작아지는 때, 그 자리를 차지함
numbers.insert(insertIdx, inputNumber)
print(numbers)
scores = [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
print('playerScore : {}'.format(scores))
minScore = 0; minScoreIdx = 0
maxScore = 0; maxScoreIdx = 0
for idx, score in enumerate(scores):
if minScore == 0 or score < minScore:
minScore = score
minScoreIdx = idx
print('minScore : {}, minScoreIdx : {}'.format(minScore, minScoreIdx))
scores.pop(minScoreIdx)
for idx, score in enumerate(scores):
if score > maxScore:
maxScore = score
maxScoreIdx = idx
print('maxScore : {}, maxScoreIdx : {}'.format(maxScore, maxScoreIdx))
scores.pop(maxScoreIdx)
print('playerScore : {}'.format(scores))
-> 최저점수와 최고점수를 찾아내서 삭제하기
students = ['기상호', '박병찬', '성준수', '최종수', '허창현', '전영중']
students.remove('최종수')
-> remove()에 삭제시킬 아이템을 직접 입력해서 삭제함
while '최종수' in students: # 해당 아이템이 리스트에 들어있는(in) 한 삭제반복
students.remove('최종수')
myList = ['마케팅 회의', '회의록 정리', '점심 약속', '월간 업무 보고', '치과 방문', '마트 장보기']
print('일정 : {}'.format(myList))
removeItem = input('삭제 대상 입력: ')
myList.remove(removeItem)
print('일정 : {}'.format(myList))
subjects = ['국어', '영어', '수학', '과학', '국사']
print('시험 과목표 : {}'.format(subjects))
removeSubject = input('삭제 과목명 입력: ')
while removeSubject in subjects: # 리스트에 아이템이 중복이 있는지 없는지 상관없이 써도, 중복 아이템을 모두 삭제시켜 줘서 편리
subjects.remove(removeSubject)
print('시험 과목표 : {}'.format(subjects))
group1 = ['기상호', '성준수', '진재유', '박병찬']
group2 = ['전영중', '최종수', '주찬양', '최종수']
group1.extend(group2)
-> group2는 영향 없음. group1만 바뀜(확장됨)
result = group1 + group2
-> 새로운 리스트가 만들어짐. 기존의 group1,group2는 영향 없음.
myFavoriteNumbers = [1, 3, 5, 6, 7]
friendFavoriteNumbers = [2, 3, 5, 8, 10]
print('myFavoriteNumbers: {}'.format(myFavoriteNumbers))
print('friendFavoriteNumbers: {}'.format(friendFavoriteNumbers))
addList = myFavoriteNumbers + friendFavoriteNumbers
print('addList: {}'.format(addList))
result = []
for number in addList:
if number not in result: # addList에서 result로 아이템을 복사하는 과정에서 '중복 아이템'을 배제하기 위함
result.append(number)
print('result: {}'.format(result))
students = ['박병찬', '전영중', '기상호', '허창현', '성준수', '최종수']
print('students: {}'.format(students))
students.sort() # 오름차순 (ㄱ,ㄴ,ㄷ..)
print('students: {}'.format(students))
students.sort(reverse=True) # 내림차순
print('students: {}'.format(students))
playerScore = [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
print('playerScore: {}'.format(playerScore))
playerScore.sort() # 오름차순 정렬
print('playerScore: {}'.format(playerScore))
playerScore.pop(0) # 최저 점수 삭제
playerScore.pop() # 최고 점수 삭제 pop(len(playerScore) - 1)을 해도 됨
print('playerScore: {}'.format(playerScore))
sum = 0; avg = 0
for score in playerScore:
sum += score
avg = sum / len(playerScore)
print('총점: %.2f' % sum)
print('평균: %.2f' % avg)
students = ['기상호', '박병찬', '성준수', '최종수', '허창현', '전영중']
students.reverse()
print(students)
-> ['전영중', '허창현', '최종수', '성준수', '박병찬', '기상호']
secret = '27156231'
secretList = []
for cha in secret:
secretList.append(int(cha)) # int() 안 하면, 문자열로 넣음
print(secretList) # [2, 7, 1, 5, 6, 2, 3, 1]
students = ['박병찬', '기상호', '성준수', '최종수', '허창현']
print('students: {}'.format(students[2:4])) # ['성준수','최종수']
numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print('numbers: {}'.format(numbers[2:-2]))
print('numbers: {}'.format(numbers[2:-2:2]))
print('numbers: {}'.format(numbers[:-2:2]))
print('numbers: {}'.format(numbers[::2]))
numbers: [0.12, 1, 9, 7, 17, 35]
numbers: [0.12, 9, 17]
numbers: [2, 0.12, 9, 17]
numbers: [2, 0.12, 9, 17, 100]
students = ['최종수', '기상호', '박병찬', '성준수', '주찬양']
print('students: {}'.format(students))
students[1:4] = ['Ki Sang Ho', 'Park Byung Chan', 'Sung Jun Su']
print('studnets: {}'.format(students))
-> 슬라이싱해서 없애고 그 자리에 아이템 리스트 대체
students = ['박병찬', '기상호', '성준수']
print(students * 2) # ['박병찬', '기상호', '성준수', '박병찬', '기상호', '성준수']
students = ['박병찬', '기상호', '성준수', '최종수', '주찬양', '성준수']
print(students.index('성준수')) # 2
-> 중복 아이템이 있어도 앞쪽 아이템부터 찾고 끝냄.
students = ['박병찬', '기상호', '성준수', '최종수', '주찬양', '성준수']
print(students.index('성준수', 3, 6)) # 인덱스 3부터 5까지 범위에서 찾기 -> 5
import random
sampleList = random.sample(range(1, 11), 10) # 범위 1~10 숫자중 10개 중복없이 추출 (순서랜덤)
selectIdx = int(input('숫자 7의 위치 입력: '))
searchIdx = sampleList.index(7) # 7의 위치(인덱스)
if searchIdx == selectIdx:
print('빙고!!')
else:
print('ㅜㅜ')
print('sampleList: {}'.format(sampleList))
print('sampleIdx: {}'.format(searchIdx))
students = ['박병찬', '기상호', '성준수', '박병찬', '기상호', '박병찬']
print(students.count('박병찬')) # 3
del students[2] # 인덱스 2의 아이템 삭제
print(students) # ['박병찬', '기상호', '박병찬', '기상호', '박병찬']
del students[1:4] # 인덱스 1부터 3까지 삭제
print(students) # ['박병찬', '기상호', '박병찬']
import random
types = ['A', 'B', 'AB', 'O']
todayData = []
for i in range(100):
type = types[random.randrange(len(types))] # len(types):4 -> 0~3 중 하나 랜덤 -> types[0~3] 랜덤으로 혈액형 뽑아냄
todayData.append(type) # 100번 랜덤으로 todayData에 아이템을 뽑아 넣음
print('todayData: {}'.format(todayData))
print('todayData length: {}'.format(len(todayData)))
for type in types:
print('{}형 \t : {}개'.format(type, todayData.count(type))) # 혈액형 각각의 개수를 셈
<제로베이스 데이터 취업 스쿨>