নিম্নলিখিতগুলি করার জন্য আরও সংক্ষিপ্ত, দক্ষ বা কেবল অজগর উপায় আছে কি?
def product(list):
p = 1
for i in list:
p *= i
return p
সম্পাদনা করুন:
আমি আসলে দেখতে পেলাম যে এটি অপারেটর.মুল ব্যবহারের চেয়ে সামান্য দ্রুত:
from operator import mul
# from functools import reduce # python3 compatibility
def with_lambda(list):
reduce(lambda x, y: x * y, list)
def without_lambda(list):
reduce(mul, list)
def forloop(list):
r = 1
for x in list:
r *= x
return r
import timeit
a = range(50)
b = range(1,50)#no zero
t = timeit.Timer("with_lambda(a)", "from __main__ import with_lambda,a")
print("with lambda:", t.timeit())
t = timeit.Timer("without_lambda(a)", "from __main__ import without_lambda,a")
print("without lambda:", t.timeit())
t = timeit.Timer("forloop(a)", "from __main__ import forloop,a")
print("for loop:", t.timeit())
t = timeit.Timer("with_lambda(b)", "from __main__ import with_lambda,b")
print("with lambda (no 0):", t.timeit())
t = timeit.Timer("without_lambda(b)", "from __main__ import without_lambda,b")
print("without lambda (no 0):", t.timeit())
t = timeit.Timer("forloop(b)", "from __main__ import forloop,b")
print("for loop (no 0):", t.timeit())
আমাকে দেয়
('with lambda:', 17.755449056625366)
('without lambda:', 8.2084708213806152)
('for loop:', 7.4836349487304688)
('with lambda (no 0):', 22.570688009262085)
('without lambda (no 0):', 12.472226858139038)
('for loop (no 0):', 11.04065990447998)
listভেরিয়েবল নাম হিসাবে ব্যবহার না করে ...
+সেই ধরণের তালিকার (একইভাবে পণ্য / পণ্যের জন্য *) পরিচয় উপাদান । এখন আমি বুঝতে পারি যে পাইথনটি গতিশীলভাবে টাইপ করা হয়েছে যা জিনিসগুলিকে আরও শক্ত করে তোলে, তবে হাস্কেলের মতো স্ট্যাটিক টাইপ সিস্টেমের সাথে বুদ্ধিমান ভাষায় এটি একটি সমাধান সমস্যা। তবে Pythonকেবল sumকোনও সংখ্যাতে কাজ করার অনুমতি দেয় , যেহেতু sum(['a', 'b'])এমনকি কাজ করে না, তাই আমি আবার বলি যে এটি পণ্যের 0জন্য sumএবং তার 1জন্য অর্থবোধ করে।

reduceউত্তর একটি বাড়াতেTypeErrorযেহেতু,forলুপ উত্তর ফেরৎ 1. এই একটি বাগ সংশোধন করা হয়forলুপ উত্তর (একটি খালি তালিকা গুণফল আর 1 তুলনায় এটি 17 বা 'আর্মাদিলো')।