19

मैं पाइथन दस्तावेज़ के माध्यम से वास्तव में गहराई से प्राप्त करने के लिए पाइथन दस्तावेज़ के माध्यम से पढ़ रहा हूं और फ़िल्टर और मानचित्र कार्यों में आया हूं। मैंने पहले फ़िल्टर का उपयोग किया है, लेकिन कभी मैप नहीं किया है, हालांकि मैंने एसओ पर विभिन्न पायथन प्रश्नों में दोनों को देखा है।पायथन: फिल्टर (फ़ंक्शन, अनुक्रम) और मानचित्र (फ़ंक्शन, अनुक्रम) के बीच अंतर

पायथन ट्यूटोरियल में उनके बारे में पढ़ने के बाद, मैं दोनों के बीच के अंतर पर उलझन में हूं। उदाहरण के लिए, 5.1.3. Functional Programming Tools से लिए:

>>> 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] 

ये लगभग ठीक मेरे लिए समारोह में एक ही देखा, तो मैं अजगर सहभागी को चलाने के लिए टर्मिनल में चला गया और अपने खुद के मामले बाहर का परीक्षण किया। मैंने उपरोक्त पहले और दूसरे उदाहरणों के लिए map का उपयोग किया, और पहले (return x % 2 != 0 and x % 3 != 0) के लिए यह संख्याओं की बजाय बूलियन की एक सूची लौटा दी।

map कभी-कभी बूलियन और अन्य बार वास्तविक वापसी मूल्य क्यों लौटाता है?

क्या कोई मुझे map और filter के बीच बिल्कुल अंतर समझा सकता है?

उत्तर

24
map(cube, range(1, 11)) 

[cube(1), cube(2), ..., cube(10)] 

के बराबर सूची से

filter(f, range(2, 25)) 

लौटे जबकि है चल

result = [] 
for i in range(2, 25): 
    if f(i): 
     result.append(i) 

सूचना है कि जबउपयोग करने के बाद result के बराबर है, परिणाम में आइटम फ़ंक्शन cube द्वारा दिए गए मान हैं।

इसके विपरीत, f द्वारा filter(f, ...) में दिए गए मान result में आइटम नहीं हैं। f(i) का उपयोग केवल निर्धारित करने के लिए किया जाता है यदि मूल्य iresult में रखा जाना चाहिए।

12

filter(), जैसा कि इसके नाम से पता चलता है, मूल पुनरावर्तनीय फ़िल्टर करता है और filter() पर दिए गए फ़ंक्शन के लिए True लौटाता है।

map() दूसरी तरफ, आपूर्ति किए गए फ़ंक्शन को पुन: प्रयोज्य के प्रत्येक तत्व पर लागू करें और प्रत्येक तत्व के परिणामों की एक सूची वापस करें।

>>> def f(x): return x % 2 != 0 and x % 3 != 0 
>>> range(11) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>>> map(f, range(11)) #the ones that returns TRUE are 1, 5 and 7 
[False, True, False, False, False, True, False, True, False, False, False] 
>>> filter(f, range(11)) #So, filter returns 1, 5 and 7 
[1, 5, 7] 
+0

कि अब समझ में आता है, मैं देख कैसे फिल्टर अवधि पता चलता है क्या समारोह मानचित्र बनाम करता है:

उदाहरण है कि आप दे दी है, उन्हें तुलना करते हैं अनुसरण करता है। – samrap

+1

असल में नाम 'नक्शा()' का अर्थ भी समझ में आता है, कुछ फ़ील्ड में जब मानचित्र क्रिया के रूप में उपयोग किया जाता है तो इसका अर्थ 1 से 1 संबंधित संबंध ढूंढना है। जैसे गणित में: 'नक्शा x से y' या आनुवंशिकी में: 'एक जीन के लिए मानचित्र मधुमेह'। 'पायथन' के बारे में एक बात अच्छी तरह से है: नाम अक्सर समझ में आता है। –

+0

यह एक अच्छा बिंदु है। यह मजाकिया है कि प्रोग्रामिंग के समान कुछ पहलू रोजमर्रा के उदाहरण हैं।जैसे कि मैं बीजगणित 2 में हूं और हम फ़ंक्शन f (x) के बारे में सीख रहे हैं और आधा कक्षा स्टंप हो गई है लेकिन विचार प्रोग्रामिंग में कार्यों के समान 100% है। – samrap

संबंधित मुद्दे