Saya perlu menulis fungsi yang mengambil daftar angka dan mengalikannya . Contoh:
[1,2,3,4,5,6]
akan memberi saya 1*2*3*4*5*6
. Saya benar-benar bisa menggunakan bantuan Anda.
python
list
multiplication
pengguna1897814
sumber
sumber
lambda
mengambil rata-rata 0,02s / 1000 repetisi, sedangkanoperator.mul
mengambil rata-rata 0,009s / 1000 repetisi, membuatoperator.mul
urutan besarnya lebih cepat.operator.mul
langsung ke C.math.prod([1,2,3,4,5,6])
. (memerlukan impor tentu saja)Kamu bisa memakai:
Lihat
reduce
danoperator.mul
dokumentasi untuk penjelasan.Anda memerlukan
import functools
baris dalam Python 3+.sumber
reduce()
fungsinya telah dihapus dari namespace global dan ditempatkan difunctools
modul. Jadi, dalam python3 yang perlu Anda katakanfrom functools import reduce
.lambda x,y: x*y
juga berfungsi sebagai gantioperator.mul
Saya akan menggunakan
numpy.prod
untuk melakukan tugas. Lihat di bawah.sumber
result = np.prod(mylist)
numpy.int32
seperti di atas 2) Untuk daftar kecil ini akan jauh lebih lambat, karena NumPy perlu mengalokasikan array (relevan jika sering diulang)np.prod(np.array(range(1,21)))
reduce
.Jika Anda ingin menghindari mengimpor apa pun dan menghindari area Python yang lebih rumit, Anda bisa menggunakan simpel untuk loop
sumber
Mulai
Python 3.8
,.prod
fungsi telah dimasukkan kemath
modul di perpustakaan standar:Metode mengembalikan produk dari
start
nilai (default: 1) kali jumlah angka yang berulang:Jika iterable kosong, ini akan menghasilkan
1
(ataustart
nilainya, jika disediakan).sumber
Inilah beberapa pengukuran kinerja dari mesin saya. Relevan jika ini dilakukan untuk input kecil dalam loop yang berjalan lama:
Hasil:
Anda dapat melihat bahwa Numpy sedikit lebih lambat pada input yang lebih kecil, karena ia mengalokasikan array sebelum multiplikasi dilakukan. Juga, hati-hati terhadap luapan di Numpy.
sumber
multiply_functools
danmultiply_numpy
terbebani dengan harus mencarinp
,functools
danoperator
global, diikuti oleh pencarian atribut. Maukah Anda beralih ke penduduk lokal?_reduce=functools.reduce,
_mul = operator.mul` dalam tanda tangan fungsi kemudianreturn _reduce(_mul, iterable)
di tubuh, dll.np.prod()
opsi mulai menjadi tercepat di 100 elemen atau lebih.Saya pribadi suka ini untuk fungsi yang mengalikan semua elemen daftar generik bersama:
Ini kompak, menggunakan hal-hal sederhana (variabel dan for loop), dan terasa intuitif bagi saya (sepertinya saya memikirkan masalahnya, ambil satu, gandakan, lalu gandakan dengan yang berikutnya, dan seterusnya! )
sumber
for i in n:
, makatotal *= i
? bukankah itu akan jauh lebih sederhana?Cara sederhananya adalah:
sumber
np.prod(your_Array)
Numpy
memilikiprod()
fungsi yang mengembalikan produk dari daftar, atau dalam hal ini karena numpy, itu adalah produk dari array di atas sumbu yang diberikan:... atau Anda dapat mengimpor
numpy.prod()
:sumber
Menemukan pertanyaan ini hari ini tetapi saya perhatikan bahwa tidak ada kasus di mana ada
None
dalam daftar. Jadi, solusi lengkapnya adalah:Dalam hal penambahan, kami memiliki:
sumber
sumber
*
, sehingga eval akan mengenali ini sebagai multiplicative. Saya bertanya-tanya bagaimana kinerja ini, terutama dibandingkan dengan solusi lainSaya ingin ini sebagai berikut:
sumber
Ini kode saya:
hasil: ('1 * 1 * 2 * 3 * 4', 24)
sumber
Bagaimana kalau menggunakan rekursi?
sumber
Solusi saya:
sumber
'' 'satu-satunya metode sederhana untuk memahami penggunaan logika untuk loop' ''
Lap = [2,5,7,7,9] x = 1 untuk i di Lap: x = i * x cetak (x)
sumber
Sangat sederhana, jangan mengimpor apa pun. Ini kode saya. Ini akan menentukan fungsi yang mengalikan semua item dalam daftar dan mengembalikan produk mereka.
sumber