[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)
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (525) N
      • 🎨 프론트엔드 공부 (247)
        • JS & TS (93)
        • HTML & CSS (24)
        • React & Next (51)
        • Vue & Nuxt (22)
        • 기타 (57)
      • 🤓 기술 학습 & 공부 기록 (117) N
        • Node.js (0)
        • Python (37)
        • 백엔드 (1) N
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (16)
        • Work (0)
        • Toy (16)
      • ⚙️ 개발 팁 & 노하우 (24)
        • 프론트엔드 (6)
        • 기타 (18)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 책꽂이 (1)
      • 🚧 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

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

  • 태그

    nextjs
    Python
    자료구조
    그리디
    PostgreSQL
    태블로
    좋은코드나쁜코드
    컴포넌트
    react-query
    백트래킹
    컴퓨터구조
    typescript
    Vue.js
    프로그래머의뇌
    cssbattle
    AWS
    javascript
    nuxt
    DP
    웹접근성
    객체지향의사실과오해
    SQL
    프로그래머스
    타이탄의도구들
    브루트포스
    GATSBY
    BFS
    react
    DFS
    머신러닝
  • 최근 댓글

  • 최근 글

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

티스토리툴바