টাপল লিস্ট থেকে যেসব টাপলের সব এলিমেন্টের গুণফল (প্রোডাক্ট) নির্দিষ্ট K-র চেয়ে বড়, শুধু সেসব টাপল ফিল্টার করার জন্য কাস্টম ফাংশন এবং লিস্ট কম্প্রিহেনশন ব্যবহার করা হয়।
উদাহরণ
def tuple_product(tup):
"""টাপলের সব এলিমেন্টের গুণফল বের করে"""
prod = 1
for x in tup:
prod *= x
return prod
my_list = [(14, 25, 17), (2, 3, 5), (81, 42, 21), (6, 2, 1)]
K = 15
print("টাপল লিস্ট:", my_list)
print("K =", K)
# প্রোডাক্ট > K হলে রাখা
filtered = [t for t in my_list if tuple_product(t) > K]
print("ফিল্টার করা টাপল:", filtered)
আউটপুট
টাপল লিস্ট: [(14, 25, 17), (2, 3, 5), (81, 42, 21), (6, 2, 1)]
K = 15
ফিল্টার করা টাপল: [(14, 25, 17), (2, 3, 5), (81, 42, 21)]
প্রোডাক্ট গণনা
| টাপল | প্রোডাক্ট | > 15? |
|---|---|---|
| (14, 25, 17) | 5950 | হ্যাঁ |
| (2, 3, 5) | 30 | হ্যাঁ |
| (81, 42, 21) | 71442 | হ্যাঁ |
| (6, 2, 1) | 12 | না |
math.prod() ব্যবহার (পাইথন ৩.৮+)
import math
filtered = [t for t in my_list if math.prod(t) > K]
numpy.prod() ব্যবহার (NumPy অ্যারে হলে)
import numpy as np
arr = np.array(my_list)
filtered = arr[np.prod(arr, axis=1) > K].tolist()
ফাংশনাল স্টাইল: reduce
from functools import reduce
import operator
tuple_product = lambda t: reduce(operator.mul, t, 1)
filtered = list(filter(lambda t: tuple_product(t) > K, my_list))
লগ-স্কেল কম্পারিজন (ওভারফ্লো এড়াতে)
import math
def log_product(tup):
return sum(math.log(abs(x)) for x in tup if x != 0)
# log(K) দিয়ে কম্পার
log_K = math.log(K)
filtered = [t for t in my_list if log_product(t) > log_K]
খুব বড় সংখ্যার প্রোডাক্টের জন্য লগ-স্কেল কম্পারিজন ওভারফ্লো প্রতিরোধ করে।