Map, Filter, Reduce
map, filter, reduce क्या हैं
map, filter और reduce list process करने के तीन tools हैं, बिना पूरे loops लिखे। map हर item बदलता है, filter सिर्फ़ कुछ items रखता है, और reduce पूरी list को एक value में समेट देता है। ये functional programming से आते हैं और list काम को compact बनाते हैं।
map — हर item बदलना
nums = [1, 2, 3, 4]
doubled = map(lambda x: x * 2, nums)
print(list(doubled))
map हर item पर function लगाता है और नया sequence लौटाता है। हम values देखने को इसे list() में लपेटते हैं, क्योंकि map lazy iterator लौटाता है।
filter — items चुनना
nums = [1, 2, 3, 4, 5, 6]
evens = filter(lambda x: x % 2 == 0, nums)
print(list(evens))
filter सिर्फ़ वे items रखता है जिनके लिए function True लौटाए। यहाँ यह even numbers रखता है। यह मूल से कम items लौटा सकता है।
reduce — एक में जोड़ना
from functools import reduce
nums = [1, 2, 3, 4]
total = reduce(lambda a, b: a + b, nums)
print(total)
reduce एक बार में दो items लेकर जोड़ता है, फिर result को अगले से जोड़ता है, वग़ैरह — पूरी list को एक value में समेटकर। ध्यान दीजिए इसे functools से import करना ज़रूरी है।
lambda इस्तेमाल
lambda एक छोटा बिना-नाम function है, इन tools में भेजने को बढ़िया।
square = lambda x: x * x
print(square(5)) # 25
# वही विचार inline इस्तेमाल:
print(list(map(lambda x: x * x, [1, 2, 3])))
[1, 4, 9]
lambda x: x * x एक-line function है। आप इसे नाम दे सकते हैं या सीधे map/filter/reduce में डाल सकते हैं।
map/filter बनाम comprehension
अक्सर list comprehension वही काम ज़्यादा पढ़ने योग्य तरीके से करता है।
# map:
list(map(lambda x: x * 2, nums))
# comprehension (साफ़):
[x * 2 for x in nums]
सरल transforms और filters के लिए, comprehension आमतौर पर Pythonic विकल्प है। map/filter तब इस्तेमाल कीजिए जब लगाने को पहले से named function हो।
आम गलतियाँ
list()भूलना। map और filter iterators लौटाते हैं — values देखने को लपेटिए।- reduce import न करना। यह
functoolsसे आता है, map और filter के विपरीत। - lambda का ज़्यादा इस्तेमाल। जटिल चीज़ों को named
deffunction साफ़ है। - Iterator दोबारा इस्तेमाल करना। map/filter result एक बार consume होता है; दोबारा इस्तेमाल को list बनाइए।
सारांश
mapहर item को नए sequence में बदलता है।filterसिर्फ़ test पास करने वाले items रखता है।reduce(functools से) सारे items को एक value में जोड़ता है।lambdaभेजने को जल्दी एक-line function देता है।- सरल मामलों में, list comprehension अक्सर ज़्यादा साफ़ है।
आगे, तुलना कीजिए list comprehension से, या data व्यवस्थित कीजिए list, tuple, set और dict से।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
map, filter और reduce क्या करते हैं?
map हर item बदलता है, filter सिर्फ़ test पास करने वाले items रखता है, और reduce सारे items को एक value में जोड़ता है। साथ में ये ज़्यादातर list-processing ज़रूरतें cover करते हैं।Lambda function क्या है?
lambda x: x * 2। इसे def से पूरा function बनाए बिना map, filter या reduce में सीधे भेजना सुविधाजनक है।map, list नहीं, map object क्यों लौटाता है?
map और filter lazy iterators लौटाते हैं जो values सिर्फ़ ज़रूरत पड़ने पर बनाते हैं। सारी values एक साथ देखने को result को list() में लपेटिए।reduce कहाँ से आता है?
reduce built-in नहीं — आप इसे functools module से import करते हैं: from functools import reduce। फिर यह items को जोड़ी-जोड़ी एक result में जोड़ता है।