Memperbarui:
Dalam Python 3.8, fungsi prod ditambahkan ke modul matematika . Lihat: math.prod () .
Info yang lebih lama: Python 3.7 dan sebelumnya
Fungsi yang Anda cari akan disebut prod () atau product () tetapi Python tidak memiliki fungsi itu. Jadi, Anda perlu menulis sendiri (yang mudah).
Pengumuman pada prod ()
Ya itu betul. Guido menolak ide untuk fungsi built-in prod () karena dia pikir itu jarang dibutuhkan.
Alternatif dengan mengurangi ()
Seperti yang Anda sarankan, tidak sulit untuk membuat Anda sendiri menggunakan reduce () dan operator.mul () :
from functools import reduce # Required in Python 3
def prod(iterable):
return reduce(operator.mul, iterable, 1)
>>> prod(range(1, 5))
24
Catatan, dalam Python 3, fungsi pengurangan () dipindahkan ke modul functools .
Kasus khusus: faktorial
Sebagai catatan, kasus penggunaan motivasi utama untuk prod () adalah untuk menghitung faktorial. Kami sudah memiliki dukungan untuk itu dalam modul matematika :
>>> import math
>>> math.factorial(10)
3628800
Alternatif dengan logaritma
Jika data Anda terdiri dari float, Anda dapat menghitung produk menggunakan jumlah () dengan eksponen dan logaritma:
>>> from math import log, exp
>>> data = [1.2, 1.5, 2.5, 0.9, 14.2, 3.8]
>>> exp(sum(map(log, data)))
218.53799999999993
>>> 1.2 * 1.5 * 2.5 * 0.9 * 14.2 * 3.8
218.53799999999998
Catatan, penggunaan log () mensyaratkan bahwa semua input positif.
Sebenarnya, Guido memveto gagasan: http://bugs.python.org/issue1093
Tetapi, seperti disebutkan dalam masalah itu, Anda dapat membuatnya dengan mudah:
sumber
reduce
?product()
dalam pustaka standar, jumlah tampilan pada pertanyaan ini dapat membantu membuat kasus tersebut.Tidak ada satu built-in, tetapi mudah untuk roll sendiri, seperti yang ditunjukkan di sini :
Lihat jawaban untuk pertanyaan ini:
Modul Python mana yang cocok untuk manipulasi data dalam daftar?
sumber
functools.reduce
bukanreduce
.prod = functools.partial(functools.reduce, operator.mul)
Ada
prod()
numpy yang melakukan apa yang Anda minta.sumber
np.prod(range(1,13))
berikan jawaban yang benar sama dengan 12! tetapinp.prod(range(1,14))
tidak.np.prod(arange(1,14, dtype='object'))
?math.prod()
Fungsi akan membuat jawaban ini usang.( atau
)
sumber
Gunakan ini
Karena tidak ada
prod
fungsi bawaan.sumber
lambda a,b: a*b
, itu bukan masalah. Tetapi mengurangi tidak menyamaratakan dengan baik, dan disalahgunakan. Saya lebih suka pemula tidak mempelajarinya.Saya lebih suka jawaban a dan b di atas menggunakan functools.reduce () dan jawaban menggunakan numpy.prod () , tetapi di sini ada solusi lain menggunakan itertools.accumulate () :
sumber
Mungkin bukan "builtin", tapi saya menganggapnya builtin. lagian gunakan saja numpy
sumber