내장 함수로 효율적인 코딩 - len, sum, max, min 등
5.3 내장 함수로 효율적인 코딩 - len, sum, max, min 등
🎯 오늘 배울 내용
for문으로 하나하나 계산했던 것들을 Python 내장 함수로 한 줄에 처리하는 방법을 배워보겠습니다!
📚 이전 방식 vs 새로운 방식
기존 방식 (for문):
numbers = [10, 20, 30, 40, 50]
# 합계 계산
total = 0
for num in numbers:
total += num
print(f"합계: {total}")
# 최댓값 찾기
maximum = numbers[0]
for num in numbers:
if num > maximum:
maximum = num
print(f"최댓값: {maximum}")
numbers = [10, 20, 30, 40, 50]
# 합계 계산
total = 0
for num in numbers:
total += num
print(f"합계: {total}")
# 최댓값 찾기
maximum = numbers[0]
for num in numbers:
if num > maximum:
maximum = num
print(f"최댓값: {maximum}")
새로운 방식 (내장 함수):
numbers = [10, 20, 30, 40, 50]
# 한 줄로 해결!
print(f"합계: {sum(numbers)}") # 150
print(f"최댓값: {max(numbers)}") # 50
print(f"개수: {len(numbers)}") # 5
numbers = [10, 20, 30, 40, 50]
# 한 줄로 해결!
print(f"합계: {sum(numbers)}") # 150
print(f"최댓값: {max(numbers)}") # 50
print(f"개수: {len(numbers)}") # 5
🔍 PART 1: 핵심 내장 함수들
기본 내장 함수
Chat에 질문:
Python에서 리스트의 길이, 합계, 최댓값을
쉽게 구하는 내장 함수들을 알려주세요.
Python에서 리스트의 길이, 합계, 최댓값을
쉽게 구하는 내장 함수들을 알려주세요.
기본 내장 함수들:
scores = [85, 92, 78, 95, 88, 76, 89]
print("=== 내장 함수 기초 ===")
print(f"개수: {len(scores)}") # 7
print(f"합계: {sum(scores)}") # 603
print(f"최댓값: {max(scores)}") # 95
print(f"최솟값: {min(scores)}") # 76
print(f"평균: {sum(scores)/len(scores):.1f}") # 86.1
# 정렬
print(f"오름차순: {sorted(scores)}")
print(f"내림차순: {sorted(scores, reverse=True)}")
scores = [85, 92, 78, 95, 88, 76, 89]
print("=== 내장 함수 기초 ===")
print(f"개수: {len(scores)}") # 7
print(f"합계: {sum(scores)}") # 603
print(f"최댓값: {max(scores)}") # 95
print(f"최솟값: {min(scores)}") # 76
print(f"평균: {sum(scores)/len(scores):.1f}") # 86.1
# 정렬
print(f"오름차순: {sorted(scores)}")
print(f"내림차순: {sorted(scores, reverse=True)}")
🎯 실습 1: 성적 통계 프로그램
print("=== 성적 통계 프로그램 ===")
math_scores = [85, 92, 78, 95, 88, 76, 89, 94, 82, 91]
english_scores = [90, 87, 83, 92, 85, 79, 88, 90, 84, 89]
# 수학 통계
print(f"📊 수학 통계:")
print(f" 학생 수: {len(math_scores)}명")
print(f" 평균: {sum(math_scores) / len(math_scores):.1f}점")
print(f" 최고점: {max(math_scores)}점")
print(f" 최저점: {min(math_scores)}점")
# 영어 통계
print(f"\n📊 영어 통계:")
print(f" 학생 수: {len(english_scores)}명")
print(f" 평균: {sum(english_scores) / len(english_scores):.1f}점")
print(f" 최고점: {max(english_scores)}점")
print(f" 최저점: {min(english_scores)}점")
# 전체 비교
all_scores = math_scores + english_scores
print(f"\n📈 전체 평균: {sum(all_scores) / len(all_scores):.1f}점")
# 상위 3점수
top3 = sorted(all_scores, reverse=True)[:3]
print(f"상위 3점수: {top3}")
print("=== 성적 통계 프로그램 ===")
math_scores = [85, 92, 78, 95, 88, 76, 89, 94, 82, 91]
english_scores = [90, 87, 83, 92, 85, 79, 88, 90, 84, 89]
# 수학 통계
print(f"📊 수학 통계:")
print(f" 학생 수: {len(math_scores)}명")
print(f" 평균: {sum(math_scores) / len(math_scores):.1f}점")
print(f" 최고점: {max(math_scores)}점")
print(f" 최저점: {min(math_scores)}점")
# 영어 통계
print(f"\n📊 영어 통계:")
print(f" 학생 수: {len(english_scores)}명")
print(f" 평균: {sum(english_scores) / len(english_scores):.1f}점")
print(f" 최고점: {max(english_scores)}점")
print(f" 최저점: {min(english_scores)}점")
# 전체 비교
all_scores = math_scores + english_scores
print(f"\n📈 전체 평균: {sum(all_scores) / len(all_scores):.1f}점")
# 상위 3점수
top3 = sorted(all_scores, reverse=True)[:3]
print(f"상위 3점수: {top3}")
🔍 PART 2: 고급 내장 함수들
추가 유용한 함수들
print("=== 고급 내장 함수들 ===")
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
students = ["김철수", "이영희", "박민수"]
scores = [85, 92, 78]
# 1. set() - 중복 제거
unique = list(set(numbers))
print(f"중복 제거: {unique}")
# 2. enumerate() - 인덱스와 값
for i, student in enumerate(students):
print(f"{i+1}번: {student}")
# 3. zip() - 리스트 묶기
for name, score in zip(students, scores):
print(f"{name}: {score}점")
# 4. range() - 숫자 범위
even_numbers = list(range(2, 11, 2))
print(f"짝수: {even_numbers}")
print("=== 고급 내장 함수들 ===")
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
students = ["김철수", "이영희", "박민수"]
scores = [85, 92, 78]
# 1. set() - 중복 제거
unique = list(set(numbers))
print(f"중복 제거: {unique}")
# 2. enumerate() - 인덱스와 값
for i, student in enumerate(students):
print(f"{i+1}번: {student}")
# 3. zip() - 리스트 묶기
for name, score in zip(students, scores):
print(f"{name}: {score}점")
# 4. range() - 숫자 범위
even_numbers = list(range(2, 11, 2))
print(f"짝수: {even_numbers}")
🎯 실습 2: 상품 분석
print("=== 상품 판매 분석 ===")
products = ["노트북", "마우스", "키보드", "모니터"]
prices = [1200000, 50000, 120000, 300000]
sales = [15, 45, 32, 28]
# 매출 계산
revenues = [price * sold for price, sold in zip(prices, sales)]
print("💰 판매 통계:")
print(f"총 매출: {sum(revenues):,}원")
print(f"평균 매출: {sum(revenues) / len(revenues):,.0f}원")
print(f"최고 매출: {max(revenues):,}원")
# 베스트셀러
max_sales = max(sales)
best_index = sales.index(max_sales)
print(f"🏆 베스트셀러: {products[best_index]} ({max_sales}개)")
print("=== 상품 판매 분석 ===")
products = ["노트북", "마우스", "키보드", "모니터"]
prices = [1200000, 50000, 120000, 300000]
sales = [15, 45, 32, 28]
# 매출 계산
revenues = [price * sold for price, sold in zip(prices, sales)]
print("💰 판매 통계:")
print(f"총 매출: {sum(revenues):,}원")
print(f"평균 매출: {sum(revenues) / len(revenues):,.0f}원")
print(f"최고 매출: {max(revenues):,}원")
# 베스트셀러
max_sales = max(sales)
best_index = sales.index(max_sales)
print(f"🏆 베스트셀러: {products[best_index]} ({max_sales}개)")
🔍 PART 3: 종합 실습
🎯 실습 3: 학급 관리 시스템
print("=== 학급 관리 시스템 ===")
students = ["김철수", "이영희", "박민수", "최지영", "정수호"]
korean = [87, 84, 91, 88, 85]
math = [85, 92, 78, 95, 88]
english = [90, 87, 83, 92, 85]
# 과목별 통계
subjects = {"국어": korean, "수학": math, "영어": english}
for subject, scores in subjects.items():
avg = sum(scores) / len(scores)
print(f"{subject}: 평균 {avg:.1f}점, 최고 {max(scores)}점")
# 학생별 성적
print(f"\n👥 학생별 성적:")
for i, name in enumerate(students):
total = korean[i] + math[i] + english[i]
average = total / 3
grade = "A" if average >= 90 else "B" if average >= 80 else "C"
print(f"{name}: 평균 {average:.1f}점 ({grade}등급)")
print("=== 학급 관리 시스템 ===")
students = ["김철수", "이영희", "박민수", "최지영", "정수호"]
korean = [87, 84, 91, 88, 85]
math = [85, 92, 78, 95, 88]
english = [90, 87, 83, 92, 85]
# 과목별 통계
subjects = {"국어": korean, "수학": math, "영어": english}
for subject, scores in subjects.items():
avg = sum(scores) / len(scores)
print(f"{subject}: 평균 {avg:.1f}점, 최고 {max(scores)}점")
# 학생별 성적
print(f"\n👥 학생별 성적:")
for i, name in enumerate(students):
total = korean[i] + math[i] + english[i]
average = total / 3
grade = "A" if average >= 90 else "B" if average >= 80 else "C"
print(f"{name}: 평균 {average:.1f}점 ({grade}등급)")
🎯 실습 4: 영화 평점 분석
print("=== 영화 평점 분석 ===")
movies = {
"어벤져스": [9, 8, 10, 9, 8, 9],
"기생충": [10, 9, 10, 9, 9, 10],
"타이타닉": [8, 9, 7, 8, 9, 8],
"인터스텔라": [9, 10, 8, 9, 10, 9]
}
# 영화별 평점
movie_averages = []
for title, ratings in movies.items():
avg = sum(ratings) / len(ratings)
movie_averages.append({"title": title, "average": avg})
print(f"{title}: 평균 {avg:.1f}점")
# 순위
sorted_movies = sorted(movie_averages, key=lambda x: x["average"], reverse=True)
print(f"\n🏆 평점 순위:")
for i, movie in enumerate(sorted_movies):
print(f"{i+1}위: {movie['title']} ({movie['average']:.1f}점)")
# 전체 통계
all_ratings = []
for ratings in movies.values():
all_ratings.extend(ratings)
print(f"\n📊 전체 평균: {sum(all_ratings) / len(all_ratings):.1f}점")
print(f"최고 평점: {max(all_ratings)}점")
print("=== 영화 평점 분석 ===")
movies = {
"어벤져스": [9, 8, 10, 9, 8, 9],
"기생충": [10, 9, 10, 9, 9, 10],
"타이타닉": [8, 9, 7, 8, 9, 8],
"인터스텔라": [9, 10, 8, 9, 10, 9]
}
# 영화별 평점
movie_averages = []
for title, ratings in movies.items():
avg = sum(ratings) / len(ratings)
movie_averages.append({"title": title, "average": avg})
print(f"{title}: 평균 {avg:.1f}점")
# 순위
sorted_movies = sorted(movie_averages, key=lambda x: x["average"], reverse=True)
print(f"\n🏆 평점 순위:")
for i, movie in enumerate(sorted_movies):
print(f"{i+1}위: {movie['title']} ({movie['average']:.1f}점)")
# 전체 통계
all_ratings = []
for ratings in movies.values():
all_ratings.extend(ratings)
print(f"\n📊 전체 평균: {sum(all_ratings) / len(all_ratings):.1f}점")
print(f"최고 평점: {max(all_ratings)}점")
💪 종합 실습: 가계부 분석
print("💰 가계부 분석 프로그램")
months = ["1월", "2월", "3월", "4월", "5월", "6월"]
income = [2500000, 2600000, 2400000, 2700000, 2550000, 2650000]
expense = [2200000, 2300000, 2100000, 2400000, 2250000, 2350000]
# 월별 수지
print("📈 월별 수지:")
monthly_balances = []
for i in range(len(months)):
balance = income[i] - expense[i]
monthly_balances.append(balance)
print(f"{months[i]}: {balance:,}원")
# 종합 통계
print(f"\n💵 6개월 종합:")
print(f"총 수입: {sum(income):,}원")
print(f"총 지출: {sum(expense):,}원")
print(f"총 잔액: {sum(monthly_balances):,}원")
print(f"평균 월 수입: {sum(income) / len(income):,.0f}원")
# 최고/최저 월
print(f"최고 수입 월: {months[income.index(max(income))]} ({max(income):,}원)")
print(f"최고 지출 월: {months[expense.index(max(expense))]} ({max(expense):,}원)")
# 흑자/적자 분석
positive = [b for b in monthly_balances if b > 0]
negative = [b for b in monthly_balances if b < 0]
print(f"\n📊 흑자 {len(positive)}개월, 적자 {len(negative)}개월")
print("💰 가계부 분석 프로그램")
months = ["1월", "2월", "3월", "4월", "5월", "6월"]
income = [2500000, 2600000, 2400000, 2700000, 2550000, 2650000]
expense = [2200000, 2300000, 2100000, 2400000, 2250000, 2350000]
# 월별 수지
print("📈 월별 수지:")
monthly_balances = []
for i in range(len(months)):
balance = income[i] - expense[i]
monthly_balances.append(balance)
print(f"{months[i]}: {balance:,}원")
# 종합 통계
print(f"\n💵 6개월 종합:")
print(f"총 수입: {sum(income):,}원")
print(f"총 지출: {sum(expense):,}원")
print(f"총 잔액: {sum(monthly_balances):,}원")
print(f"평균 월 수입: {sum(income) / len(income):,.0f}원")
# 최고/최저 월
print(f"최고 수입 월: {months[income.index(max(income))]} ({max(income):,}원)")
print(f"최고 지출 월: {months[expense.index(max(expense))]} ({max(expense):,}원)")
# 흑자/적자 분석
positive = [b for b in monthly_balances if b > 0]
negative = [b for b in monthly_balances if b < 0]
print(f"\n📊 흑자 {len(positive)}개월, 적자 {len(negative)}개월")
🌟 이번 챕터에서 배운 것
기본 내장 함수
len()
: 길이 구하기sum()
: 합계 구하기max()
,min()
: 최댓값, 최솟값sorted()
: 정렬
고급 내장 함수
set()
: 중복 제거enumerate()
: 인덱스와 값zip()
: 리스트 묶기range()
: 숫자 범위
💡 핵심 포인트:
- 내장 함수로 코드가 간결해짐
- 실행 속도도 빨라짐
- 가독성 향상
🚀 다음 챕터 예고: Chapter 5.4에서는 Cursor의 @파일명 기능을 배워보겠습니다!