1. scoreList = [70,60,55,75,95,90,80,80,85,100] 리스트의 평균을 for문을 활용해 출력하시오.
scoreList = [70,60,55,75,95,90,80,80,85,100]
scoreSum = 0
scoreLength = len(scoreList)
for i in range (0, scoreLength,):
scoreSum = scoreSum + scoreList[i]
if scoreLength != 0:
average = scoreSum / scoreLength
print("평균은 ",average)
else:
print("리스트가 비어 있습니다.")
결과 :
평균은 79.0
2. mathList, korList, musicList에서 중간고사 과목별 평균 및 전체 평균을 출력하시오.
mathList = [20,20,40,40,30]
korList = [0,0,0,0,0]
musicList = [30,30,50,50,40]
midtermList = [mathList, korList, musicList] 를 활용하세요.
방법 1 )
# 각 리스트의 합은 그냥 sum() 함수를 이용. 딕셔너리 사용해보고 싶어서 딕셔너리 사용해봄.
mathList = [20,20,40,40,30]
korList = [0,0,0,0,0]
musicList = [30,30,50,50,40]
midtermList = [mathList, korList, musicList]
midtermLength = len(midtermList)
midtermAvg =[] # 계산해서 담을 빈 평균 리스트 생성.
for i in range(0,midtermLength,):
if len(midtermList[i]) == 0: # 0으로 나누게 되는 경우를 방지.
midtermAvg.append(0)
else: # midtermList의 i번째 리스트의 합을 그 길이로 나누어 madtermAvg 리스트에 과목 평균을 추가함.
midtermAvg.append((sum(midtermList[i]) / len(midtermList[i])))
# 전체 평균 = 과목 평균의 합 / 과목의 수
totalAvg = sum(midtermAvg) / midtermLength
# 딕셔너리 생성. 생성 안 하고 그냥 바로 midtermAvg 리스트 인덱스 사용해도 되는데 그냥 만들어봄.
scoreAvgDic = {"수학평균":midtermAvg[0],"국어평균":midtermAvg[1],"음악평균":midtermAvg[2],"전체평균":totalAvg}
print("수학평균은 {}\n\
국어평균은 {}\n\
음악평균은 {}\n\
전체평균은 {}"\
.format(scoreAvgDic["수학평균"],scoreAvgDic["국어평균"],scoreAvgDic["음악평균"],scoreAvgDic["전체평균"]))
결과 :
수학평균은 30.0
국어평균은 0.0
음악평균은 40.0
전체평균은 23.333333333333332
방법 2 )
# 각 리스트의 합을 for문을 이용해 eachSum = eachSum + eachList[j]로 돌림. 결과적으로 이중 for문 사용.
mathList = [20,20,40,40,30]
korList = [0,0,0,0,0]
musicList = [30,30,50,50,40]
midtermList = [mathList, korList, musicList]
totalSum = 0
eachSum = 0
midtermAvg = [] # 계산해서 담을 빈 평균 리스트 생성.
for i in range(0,len(midtermList),):
eachList = midtermList[i] # midtermList의 i번째 리스트를 eachList로 정의.
eachSum = 0 # 두 번째 j for문이 들어가기 전에 eachSum을 0으로 초기화.
for j in range(0,len(eachList),):
if len(eachList) == 0: # 0으로 나누게 되는 경우를 방지.
midtermAvg.append(0)
else: # j for문을 사용해 eachList의 값을 리스트 길이만큼 누적해서 합산.
eachSum = eachSum + eachList[j]
# 두 번째 j for문이 끝나고 밖으로 나오면 i for문의 마지막에 j for문의 결과를 사용해 midterAvg 리스트에 과목 평균 추가함.
midtermAvg.append(eachSum / len(eachList))
# 전체 평균 = 과목 평균의 합 / 과목의 수
totalAvg = sum(midtermAvg) / len(midtermList)
print("수학평균은 {}\n\
국어평균은 {}\n\
음악평균은 {}\n\
전체평균은 {}"\
.format(midtermAvg[0],midtermAvg[1],midtermAvg[2],totalAvg))
결과 :
수학평균은 30.0
국어평균은 0.0
음악평균은 40.0
전체평균은 23.333333333333332
3. 'kopo_customerdata.csv' 파일의 "TOTAL_AMOUNT" 컬럼에서 최대/최소값 모두 제외한 평균을 반복문을 활용하여 풀어보기.
2020/03/25 - [개발자/Python] - Python (파이썬) 단계별 실습하며 배우는 빅데이터 프로그래밍 P.29 10번 문제
의 다른 풀이입니다.
import pandas as pd
customerData = pd.read_csv("/Users/.../Desktop/exampleCode/dataset/kopo_customerdata.csv")
customerTotalList = customerData["TOTAL_AMOUNT"].tolist()
# 리스트 오름차순 정렬, 리스트의 전체 개수와 최솟값과 최댓값의 중복 개수를 정의.
customerTotalList.sort()
minDuplication = customerTotalList.count(min(customerTotalList))
maxDuplication = customerTotalList.count(max(customerTotalList))
# 최댓값, 최솟값 중복이 사라진 새 리스트 생성
customerTotalList = customerTotalList[minDuplication : len(customerTotalList) - maxDuplication]
# 이 부분만 for문으로 바꿔서 아래 for문과 속도를 비교해봄.
customerSum = 0
for i in range(0, len(customerTotalList),):
customerSum = customerSum + customerTotalList[i]
if len(customerTotalList) == 0:
average = 0
else:
average = customerSum / len(customerTotalList)
average
결과 :
35248.91490376756
4. 제품 담당자와 인터뷰를 해보니 2018년도 이전 모델은 모델명 앞에 GA가 붙으면 가스건조기, EL이 붙으면 전기건조기라 한다. 그리고 2019년도 모델부터는 모델 끝2자리의 합이 짝수이면 가스건조기 홀수이면 전기건조기라고 한다.
다음 모델리스트에서 가스건조기면 "GAS_"를 전기건조기면 "ELEC_"를 붙여보자!
modelList =
["2018_GAMODEL001",
"2016_GAMODEL002",
"2015_ELMODEL001",
"2020_MODEL041",
"2020_MODEL022",
"2020_MODEL027",
"2020_MODEL055",
"2020_MODEL023"]
modelList = ["2018_GAMODEL001", "2016_GAMODEL002", "2015_ELMODEL001", "2020_MODEL041",\
"2020_MODEL022", "2020_MODEL027", "2020_MODEL055", "2020_MODEL023"]
splitter = "_"
modelLength = len(modelList)
splittedList = []
preFixGas = "GAS_"
preFixElec = "ELEC_"
# 리스트 자체를 split로 쪼갤 수 없다. 리스트의 인덱스 내의 문자열을 split로 쪼개야 하기 때문에,
# 리스트 길이만큼 반복문 실행하여 년도와 모델명을 분리.
for i in range(0,modelLength,):
splittedList.append(modelList[i].split(splitter))
splittedList # 분리된 리스트 확인.
# 1. 2018년도 이전 모델의 리스트 찾기
for i in range(0,modelLength,):
if splittedList[i][0] <= '2018':
# 2. GA로 시작하면 GAS_로 고치기, EL로 시작하면 ELEC_로 고치기
if splittedList[i][1][0:2] == 'GA':
splittedList[i][1] = splittedList[i][1].replace('GA','GAS_')
else:
splittedList[i][1] = splittedList[i][1].replace('EL','ELEC_')
# 3. 그 외의 년도(2019년도 이상) 모델의 리스트는 모델명 끝 2자리의 합이 짝수면 모델명 앞에 GAS_, 홀수면 ELEC_ 붙이기
else: # (모델넘버의 끝에서 2번째 자릿수를 문자로 추출해 int 캐스팅 + 모델넘버의 끝에서 1번째 자릿수를 문자로 추출해 int 캐스팅) % 짝수 판단
if (int(splittedList[i][1][-2]) + int(splittedList[i][1][-1])) % 2 == 0:
splittedList[i][1] = preFixGas + splittedList[i][1]
else:
splittedList[i][1] = preFixElec + splittedList[i][1]
splittedList # 정상적으로 모델명 수정되었는지 확인.
# 4. 모델명이 수정된 splittedList를 다시 modelList 형태로 합치기
for i in range(0,modelLength,):
modelList[i] = splittedList[i][0] + splitter + splittedList[i][1]
# 결과 확인
modelList
결과 :
['2018_GAS_MODEL001',
'2016_GAS_MODEL002',
'2015_ELEC_MODELEC_001',
'2020_ELEC_MODEL041',
'2020_GAS_MODEL022',
'2020_ELEC_MODEL027',
'2020_GAS_MODEL055',
'2020_ELEC_MODEL023']
굳이 for문 활용 조건이 없다면 다음 함수를 만들어 사용하면 쉽고 빠르게 해결된다.
def averageWithoutMinMax(inputList):
# 1. 입력된 리스트의 오름차순 정렬, 최솟값, 최댓값의 중복 개수를 정의.
inputList.sort()
minDup = inputList.count(min(inputList))
maxDup = inputList.count(max(inputList))
# 2. 중복되는 최솟값, 최댓값이 사라진 새 리스트 생성.
inputList = inputList[minDup : len(inputList) - maxDup]
# 3. 최솟값
if len(inputList) == 0:
average = 0
else:
average = sum(inputList) / len(inputList)
return average
'개발자 > Python' 카테고리의 다른 글
Python (파이썬) inplace (.rename) (0) | 2020.04.26 |
---|---|
Python (파이썬) SqlAlchemy 모듈 (engine) (0) | 2020.04.26 |
Python (파이썬) DB 엔진을 활용, Pandas로 SQL을 이용해 불러오고 내보내기 (0) | 2020.04.26 |
Python (파이썬) 문자열로 구성된 리스트의 합, 평균 등을 계산하고 형변환하는 함수를 만들어보자 (0) | 2020.04.26 |
Python (파이썬) 깃허브에서 가져오기 (0) | 2020.04.26 |