दिलचस्प पोस्ट
जब SqlCommand पैरामीटर्स जोड़ते समय "SqlDbType" और "आकार" का उपयोग किया जाना चाहिए? मेरी पीएचपी फ़ाइलें सादा पाठ के रूप में क्यों दिख रही हैं? Google साइन इन एपीके पर काम नहीं कर रहा है जावा में एक स्ट्रिंग में वेब पेज से html को सही ढंग से लोड करने का सरल तरीका Postgresql: उपयोगकर्ता "पोस्टग्रेज़" के लिए पासवर्ड प्रमाणीकरण विफल Https://chrome.google.com/webstore/ पर क्रोम एक्सटेंशन सामग्री स्क्रिप्ट क्यों नल एक वस्तु है और रिक्त और अपरिभाषित के बीच अंतर क्या है? एंड्रॉइड: ध्वनि स्तर खोजें ggplot अलग किंवदंती और साजिश सी ++ क्रॉस प्लेटफॉर्म उच्च-रिज़ॉल्यूशन टाइमर .NET में NameValueCollection में किसी क्वेरी स्ट्रिंग को कैसे विश्लेषित करें स्तंभ के अनुसार CSV फ़ाइल कॉलम पढ़ें कैसे वर्चुअल फ़ंक्शन और vtable कार्यान्वित हैं? गतिशील चर नाम जावा स्कला इटेरेबल के शीर्ष एन तत्वों को प्राप्त करने का सरल तरीका

पायथन 3 में फ़िल्टर, मानचित्र, और कम करने के तरीके

filter , map , और पायथन 2 में पूरी तरह से काम को reduce करते हैं। यहां एक उदाहरण है:

 >>> def f(x): return x % 2 != 0 and x % 3 != 0 >>> filter(f, range(2, 25)) [5, 7, 11, 13, 17, 19, 23] >>> def cube(x): return x*x*x >>> map(cube, range(1, 11)) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] >>> def add(x,y): return x+y >>> reduce(add, range(1, 11)) 55 

लेकिन पायथन 3 में, मुझे निम्नलिखित आउटपुट प्राप्त होते हैं:

 >>> filter(f, range(2, 25)) <filter object at 0x0000000002C14908> >>> map(cube, range(1, 11)) <map object at 0x0000000002C82B70> >>> reduce(add, range(1, 11)) Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> reduce(add, range(1, 11)) NameError: name 'reduce' is not defined 

मैं इसकी सराहना करता हूं अगर कोई मुझे समझा सकता है कि यह क्यों है

अधिक स्पष्टता के लिए कोड का स्क्रीनशॉट:

पायथन 2 और 3 साइड-बाय-साइड की IDLE सत्र

Solutions Collecting From Web of "पायथन 3 में फ़िल्टर, मानचित्र, और कम करने के तरीके"

आप पायथन 3.0 में नया क्या है में बदलाव के बारे में पढ़ सकते हैं। जब आप 2.x से 3.x में स्थानांतरित हो जाते हैं तो आपको इसे पूरी तरह से पढ़ना चाहिए क्योंकि बहुत कुछ बदल गया है।

पूरे उत्तर यहाँ दस्तावेज़ीकरण से उद्धरण हैं।

दर्शनों और बदले में सूची के बदले

कुछ प्रसिद्ध एपीआई अब सूचियों को वापस नहीं लौटेगी:

  • […]
  • map() और filter() रिटर्न इटरेटर यदि आपको वास्तव में एक सूची की आवश्यकता है, तो एक त्वरित फिक्स उदाहरण list(map(...)) , लेकिन एक बेहतर सुधार अक्सर सूची की समझ (विशेषकर जब मूल कोड लैम्ब्डा का उपयोग करता है) का उपयोग करने के लिए होता है, या कोड को दोबारा लिखता है, इसलिए यह सभी पर एक सूची की आवश्यकता नहीं है फ़ंक्शन के दुष्प्रभावों के लिए विशेष रूप से मुश्किल map() लागू होता है; सही परिवर्तन लूप के for नियमित उपयोग करना है (एक सूची बनाने के बाद से यह केवल बेकार हो जाएगा)
  • […]

Builtins

  • […]
  • निकाला गया reduce() functools.reduce() उपयोग करें यदि आपको वास्तव में इसकी आवश्यकता है; हालांकि, पाश के for स्पष्ट समय का 99 प्रतिशत अधिक पठनीय है।
  • […]

map और filter की कार्यक्षमता जानबूझकर इसे फिर से आने वालों में लौटने के लिए बदल दी गई थी, और इसे कम करने के लिए एक अंतर्निहित और functools.reduce में रखा गया functools.reduce

इसलिए, filter और map , आप उन परिणामों को देखने के लिए लपेट कर सकते हैं list() जैसे कि आपने पहले किया था।

 >>> def f(x): return x % 2 != 0 and x % 3 != 0 ... >>> list(filter(f, range(2, 25))) [5, 7, 11, 13, 17, 19, 23] >>> def cube(x): return x*x*x ... >>> list(map(cube, range(1, 11))) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] >>> import functools >>> def add(x,y): return x+y ... >>> functools.reduce(add, range(1, 11)) 55 >>> 

अब सिफारिश यह है कि आप अपने मानचित्र के उपयोग को बदल दें और जनरेटर अभिव्यक्ति या सूची की अभिव्यक्तियों के साथ फ़िल्टर करें। उदाहरण:

 >>> def f(x): return x % 2 != 0 and x % 3 != 0 ... >>> [i for i in range(2, 25) if f(i)] [5, 7, 11, 13, 17, 19, 23] >>> def cube(x): return x*x*x ... >>> [cube(i) for i in range(1, 11)] [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] >>> 

वे कहते हैं कि लूप के लिए कम से कम 99 प्रतिशत समय पढ़ने के लिए आसान है, लेकिन मैं सिर्फ functools.reduce साथ functools.reduce

संपादित करें : 99 प्रतिशत आंकड़ा गइडो वैन रॉसम द्वारा लिखित पायथन 3.0 पेज में नया क्या है, से सीधे खींचा गया है।

अन्य उत्तरों के लिए एक परिशिष्ट के रूप में, यह एक संदर्भ प्रबंधक के लिए एक अच्छा उपयोग-मामले की तरह लग रहा है जो इन फ़ंक्शन के नामों को फिर से मैप करेगा जो एक सूची वापस reduce और वैश्विक नामस्थान में reduce

एक त्वरित कार्यान्वयन इस तरह दिख सकता है:

 from contextlib import contextmanager @contextmanager def noiters(*funcs): if not funcs: funcs = [map, filter, zip] # etc from functools import reduce globals()[reduce.__name__] = reduce for func in funcs: globals()[func.__name__] = lambda *ar, func = func, **kwar: list(func(*ar, **kwar)) try: yield finally: del globals()[reduce.__name__] for func in funcs: globals()[func.__name__] = func 

ऐसे प्रयोग के साथ जो इस तरह दिखता है:

 with noiters(map): from operator import add print(reduce(add, range(1, 20))) print(map(int, ['1', '2'])) 

कौन सा प्रिंट करता है:

 190 [1, 2] 

बस मेरी 2 सेंट 🙂