Pythonでのreduceの使い方とは?基本的な使い方から辞書の値の計算方法を紹介

- システム
エンジニア - Pythonのreduceはどのような機能があるのですか。
- プロジェクト
マネージャー - リストの中身をすべて加算したり、減算したりできます。
Pythonでのreduceの使い方とは?
今回は、Pythonでのreduceの使い方について説明します。reduceを使えば、リストの中身を全て加算したり、減算したりできます。
ここでは、以下について紹介します。
・基本的な使い方
・listの結合
・和集合や積集合
・文字列の結合
・全要素の計算
・パスの連結
・辞書の値
Pythonでのreduceの使い方に興味のある方は、ぜひご覧ください。
基本的な使い方
Pythonでのreduceの基本的な使い方を紹介します。ソースコードに「from functools import reduce」を記述してください。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
from functools import reduce
from operator import add
from operator import sub
from operator import mul
# listの生成
list = range(1, 6)
# operatorを使った計算
# 全要素を加算
print(reduce(add, list)) # 1 + 2 + 3 + 4 + 5 = 15
# 全要素を減算
print(reduce(sub, list)) # 1 - 2 - 3 - 4 - 5 = -13
# 全要素を乗算
print(reduce(mul, list)) # 1 * 2 * 3 * 4 * 5 = 120
# operatorを使わない計算
# 全要素を加算
print(reduce(lambda x, y: x + y, list)) # 15
# 全要素を減算
print(reduce(lambda x, y: x - y, list)) # -13
# 全要素を乗算
print(reduce(lambda x, y: x * y, list)) # 120
|
実行結果は以下のようになります。
1
2
3
4
5
6
|
15
-13
120
15
-13
120
|
Pythonのreduceを使用すると、listの全要素を加算するなどの計算ができます。
listの結合
Pythonでは、reduceを使えば、listの結合ができます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
from functools import reduce
# listの生成
lists = [[4, 6, 33], [61, 2], [53, 67, 21, 8]]
# listの結合
print(reduce(lambda total, x: total + x, lists, [])) # [4, 6, 33, 61, 2, 53, 67, 21, 8]
|
実行結果は以下のようになります。listが順番に結合されていることが分かります。
1
|
[4, 6, 33, 61, 2, 53, 67, 21, 8]
|
このようにPythonでは、reduceでlistの結合ができます。
和集合や積集合
Pythonでは、reduceを使えば、集合の和集合や積集合を求められます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
|
from functools import reduce
from operator import and_
from operator import or_
# 和集合
print(reduce(or_, ({1}, {1, 2}, {1, 2, 3}, {1, 2, 3, 4}))) # {1, 2, 3, 4}
# 積集合
print(reduce(and_, ({1}, {1, 2}, {1, 2, 3}, {1, 2, 3, 4}))) # {1}
|
実行結果は以下のようになります。集合の和集合や積集合が表示されています。
1
2
|
{1, 2, 3, 4}
{1}
|
このようにPythonでは、reduceを使えば、集合の和集合や積集合を求められます。
文字列の結合
Pythonでは、reduceを使えばlistの文字列として結合できます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
|
from functools import reduce
# listの生成
i_list = [1, 2, 3, 4, 5]
s_list = ["aa", "bb", "cc", "dd", "ee"]
# 文字列結合
print(reduce(lambda x,y:x+str(y), i_list, "")) # 12345
print(reduce(lambda x,y:x+str(y)+" ", s_list, "")) # aa bb cc dd ee
|
実行結果は以下のようになります。
1
2
|
12345
aa bb cc dd ee
|
このようにPythonでは、reduceを使えばlistの文字列として結合できます。
全要素の計算
Pythonでは、reduceを使えばlistのそれぞれの要素について計算ができます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
|
from functools import reduce
# listの生成
list = [1, 2, 3, 4, 5]
# 全要素に100を加える
print(reduce(lambda calc,x:calc|{x + 100}, list, set())) # {101, 102, 103, 104, 105}
# 全要素を2乗する
print(reduce(lambda calc,x:calc|{x * x}, list, set())) # {16, 1, 4, 9, 25}
|
実行結果は以下のようになります。
1
2
|
{101, 102, 103, 104, 105}
{16, 1, 4, 9, 25}
|
set()は集合を作成しますが、集合は順序の概念がありませんので、順序が変わることがあります。必要に応じて、ソートしてください。
最大公約数
Pythonでは、reduceを使えば最大公約数を求められます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
|
from functools import reduce
import math
# 最大公約数
print(reduce(math.gcd, (3, 9, 18))) # 3
print(reduce(math.gcd, (9, 18, 27))) # 9
list1 = [3, 9, 18]
list2 = [9, 18, 27]
print(reduce(math.gcd, list1)) # 3
print(reduce(math.gcd, list2)) # 9
|
実行結果は以下のようになります。
1
2
3
4
|
3
9
3
9
|
パスの連結
Pythonでは、reduceを使えばパスの文字列として連結できます。
実際のソースコードを見てみましょう。
1
2
3
4
5
|
from functools import reduce
import os
print(reduce(os.path.join, ["c:/","path","to","file.txt"])) # c:/path/to/file.txt
print(reduce(os.path.join, ["d:/","hoge","piyo","fuge.txt"])) # d:/hoge/piyo/fuge.txt
|
実行結果は以下のようになります。
1
2
|
c:/path/to/file.txt
d:/hoge/piyo/fuge.txt
|
辞書の値
Pythonでは、reduceを使えば辞書の値をlistと同じように計算できます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
|
from functools import reduce
from operator import add
from operator import sub
from operator import mul
# 辞書の生成
mydict = {"key1":1, "key2":2, "key3":3, "key4":4, "key5":5}
# 辞書の値をreduceで計算
print(reduce(add, mydict.values())) # 1 + 2 + 3 + 4 + 5 = 15
print(reduce(sub, mydict.values())) # 1 - 2 - 3 - 4 - 5 = -13
print(reduce(mul, mydict.values())) # 1 * 2 * 3 * 4 * 5 = 120
|
実行結果は以下のようになります。
1
2
3
|
15
-13
120
|
- システム
エンジニア - Pythonでのreduceは辞書についても計算できるのですね。
- プロジェクト
マネージャー - そうですね。辞書に対してもreduceでlistと同じように計算できます。
まとめ
いかがでしたでしょうか。Pythonでのreduceの使い方について説明しました。reduceを使えば、リストの中身を全て加算したり、減算したりできます。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Python新着案件New Job
-
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都豊島区(池袋駅) -
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都豊島区(池袋駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅)