일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바
- 디버깅
- 컴퓨터구조
- SQL
- 티스토리챌린지
- JDBC
- 자바 실습
- 자바스크립트심화
- 연습문제
- JSP
- 머신러닝
- 파이썬
- JSP/Servlet
- 컴퓨터비전
- 중학수학
- 딥러닝
- 정보처리기사실기
- CSS
- 개발일기
- 데이터베이스
- 문자와식
- 정보처리기사필기
- 자바스크립트
- c언어
- 오블완
- 데이터분석
- 혼공머신
- html/css
- 중학1-1
- 상속
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
함수형 프로그래밍 다루기 1 - 순서대로 배정하기 및 키 값으로 데이터 묶기 본문
함수형 프로그래밍은 자료 처리를 수학 함수 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. 이번 단원에서는 파이썬 함수형 프로그래밍을 지원하는 모듈을 알아본다.
상담원을 순서대로 배정하려면? - itertools.cycle
반복 가능한 객체(iterable)를 순서대로 무한히 반복하는 이터레이터를 생성하는 함수이다.
어느 고객센터에 다음과 같이 3명이 근무 중이라 할 때 이 3명이 순서대로 고객 상담 전화를 받을 수 있도록 하는 상담 프로그럼을 개발해야 한다.
상담 전화가 올 때마다 순서대로 상담원을 배정하려면 어떻게 하면 될까?
다음처럼 itertools.cycle() 함수로 무한히 반복하는 이터레이터를 만들고 next()를 호출하여 다음 사람을 계속 요청하면 된다.
next()로 요청할 때마다 순서대로 3명의 상담원을 무한히 반복하는 것을 확인할 수 있다.
itertools - 효율적인 루핑을 위한 이터레이터를 만드는 함수
연간 매출액을 계산하려면? - itertools.accumulate
반복 가능한 객체의 누적합을 계산하여 이터레이터로 반환하는 함수이다.
다음은 어떤 회사의 1월부터 12월까지의 매출 데이터이다(만위는 만원).
월별 누적 합계를 구하는 프로그램이 필요하다. 이 프로그램을 만들려면 어떻게 해야 할까?
누적 합계를 알고 싶을 때는 itertools의 accumulate() 함수를 사용하는 것이 가장 편리하다.
그때까지의 최대값(running maxinum) 표시하기
1월에서 12월 동안 그때까지의 최대 월수입을 표시하고 시 ㅍ다면 다음처럼 itertools.accumulate() 함수의 두 번째 인수로 max를 전달하면 된다.
3월까지의 월 최고 수입은 1814이고 8월까지는 2556 등 그 달의 최고 수입이 출력되고 있다.
키값으로 데이터를 묶으려면? - itertools.gruopby
반복 가능한 객체를 키값으로 분류하고 그 결과를 반환하는 함수이다.
다음은 이름과 혈액형으로 구성한 8명의 데이터이다.
이 데이터를 혈액형으로 부류하여 표시하려면 어떻게 해야 할까?
itertools.groupby() 함수를 사용하면 혈액형별로 묶어 데이터를 분류할 수 있다. 이 함수를 사용하기 전에 먼저 분류 기준인 혈액형 순으로 정렬해야 한다.
itertools.groupby() 역시 데이터를 혈액형별로 나누어야 하므로 튜플 형식의 이터레이터를 반환한다. 잘 분류되었는지 pprint()로 확인할 수 있다.
혈액형별로 잘 출력이 되고 있다. 만약 정렬하지 않고 groupby만 하면 어떻게 될까?
정렬 없이 groupby를 하면 발생하는 문제
혈액형이 바뀔 때마다 혈액형 그룹이 형성되어 뒤죽박죽되는 것을 알 수 있다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
파일과 디렉터리 다루기 - 디렉터리 구성 및 특정 파일 찾기 (0) | 2024.10.06 |
---|---|
함수형 프로그래밍 다루기 2 - 순열과 조합, 좌표 정렬하기 (0) | 2024.10.06 |
숫자와 숫자 다루기 2 - 분수 계산하기 및 무작위 난수 추출, 평균과 중앙값 구하기 (0) | 2024.10.06 |
숫자와 숫자 다루기 1 - 최대공배수와 최소공배수 모듈 및 소수점 자릿수 표현하기 (0) | 2024.10.06 |
다양한 데이터 다루기 4 - 숫자에 이름 붙여서 사용하기 및 위상정렬로 과목의 순서 정하기 (0) | 2024.10.06 |