[Python] reduce 사용하기

2024. 9. 24.·🤓 기술 학습 & 공부 기록/Python

📍목표

- Python에서 reduce 사용하기

 

📍functools.reduce

예를 들어, 어떤 각각의 경우의 수를 나타내는 [1, 2, 3, 4, 5] 리스트가 있다고 할 때, 모든 경우의 수를 구하기 위해 이 리스트의 모든 원소를 곱하는 결과를 반환받고 싶다면 어떻게 할까?

 

for loop 를 사용할 수도 있지만, JavaScript의 reduce 같은 메서드를 사용해 결과를 깔끔하게 반환할 수도 있을 것이다.

 

Python에도 reduce 함수가 존재한다. functools 패키지에서 import 해오면 된다

from functools import reduce

 

기본 문법은 아래와 같다

reduce(function, iterable[, initializer])

 

- function: 2개의 인자를 받아(리스트 원소가 순차적으로 적용됨을 의미), 연산을 적용한 후 리턴해주는 함수를 넣는다.

lambda 함수를 넣으면 함수를 직접 선언하는 번거로움을 덜 수 있다

 

- iterable: reduce를 적용할 이터러블

- initializer: (옵셔널) 초기값을 넣는다. 가령 이터러블의 모든 덧셈을 한다면 0을 넣으면 되겠다. initializer를 넣지 않으면 자동으로 1번째, 2번째 원소부터 연산이 실행되므로 넣지 않아도 된다

 

📍예시

프로그래머스 <의상> 문제를 풀 때 사용해봤다. 자연수로 이루어진 리스트들에 각각 +1 해준 후 곱셈을 구하기 위해 사용했다.

예를 들면, [2, 2, 3] -> [3, 3, 4] -> 3 * 3 * 4 순으로 처리된다.

 

from functools import reduce

def solution(clothes):
    dic = {}

    for cloth, category in clothes:
        if category in dic:
            dic[category] += 1
        else:
            dic[category] = 1

    return reduce(lambda x, y: x * y, [num + 1 for num in dic.values()]) - 1

 

reduce 를 사용하면 map 이나 for loop 을 사용한 결과가 이터러블이기 때문에 한 번 더 가공해야하는 수고를 덜 수 있으며 훨씬 Pythonic한 코드를 짤 수 있다!

 

'🤓 기술 학습 & 공부 기록/Python' 카테고리의 다른 글
  • [Python] 프로젝트 패키지 관리하기(pip freeze)
  • [Python] virtualenv 모듈로 가상환경 사용하기
  • [Python] 그리디 (2)
  • [Python] 그리디 (1)
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (510)
      • 🎨 프론트엔드 공부 (247)
        • JS & TS (86)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
[Python] reduce 사용하기
상단으로

티스토리툴바