관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

함수형 프로그래밍 다루기 1 - 순서대로 배정하기 및 키 값으로 데이터 묶기 본문

프로그래밍 언어/파이썬

함수형 프로그래밍 다루기 1 - 순서대로 배정하기 및 키 값으로 데이터 묶기

huenuri 2024. 10. 6. 15:13

함수형 프로그래밍은 자료 처리를 수학 함수 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. 이번 단원에서는 파이썬 함수형 프로그래밍을 지원하는 모듈을 알아본다.


 

 

 

 

상담원을 순서대로 배정하려면? - itertools.cycle

반복 가능한 객체(iterable)를 순서대로 무한히 반복하는 이터레이터를 생성하는 함수이다.

 

어느 고객센터에 다음과 같이 3명이 근무 중이라 할 때 이 3명이 순서대로 고객 상담 전화를 받을 수 있도록 하는 상담 프로그럼을 개발해야 한다.

상담 전화가 올 때마다 순서대로 상담원을 배정하려면 어떻게 하면 될까?


 

 

 

다음처럼 itertools.cycle() 함수로 무한히 반복하는 이터레이터를 만들고 next()를 호출하여 다음 사람을 계속 요청하면 된다.

 

next()로 요청할 때마다 순서대로 3명의 상담원을 무한히 반복하는 것을 확인할 수 있다.

 

itertools - 효율적인 루핑을 위한 이터레이터를 만드는 함수

 

itertools — Functions creating iterators for efficient looping

This module implements a number of iterator building blocks inspired by constructs from APL, Haskell, and SML. Each has been recast in a form suitable for Python. The module standardizes a core set...

docs.python.org

 

 

함수 더 알아보기

 

04-1 함수

파이썬에서 함수를 이해하는 것은 매우 중요하다. 먼저 함수란 무엇인지 알아보자. [TOC] ## 함수란 무엇인가? 함수를 설명하기 전에 믹서를 생각해 보자. 우리는 믹서에…

wikidocs.net


 

 

 

 

연간 매출액을 계산하려면? - 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를 하면 발생하는 문제

 

혈액형이 바뀔 때마다 혈액형 그룹이 형성되어 뒤죽박죽되는 것을 알 수 있다.