2012-09-07 19 views
70

में फ़िल्टर मैं पाइथन में फ़िल्टर की अवधारणा सीख रहा हूं। मैं इस तरह एक साधारण कोड चला रहा हूँ।पायथन 3

>>> def f(x): return x % 2 != 0 and x % 3 != 0 
>>> filter(f, range(2, 25)) 

लेकिन सूची प्राप्त करने के बजाय, मुझे इस तरह का कुछ संदेश मिल रहा है।

<filter object at 0x00FDC550> 

इसका क्या अर्थ है? क्या इसका मतलब है कि मेरे फ़िल्टर किए गए ऑब्जेक्ट i.e सूची को उस स्मृति स्थान पर संग्रहीत किया जाता है? मुझे जिस सूची की आवश्यकता है, मैं उसे कैसे प्राप्त करूं?

उत्तर

118

ऐसा लगता है कि आप अजगर 3.x का उपयोग कर रहे हैं। पायथन 3 में, filter, map, zip, आदि एक वस्तु को वापस लाएं जो कि पुनरावर्तनीय है, लेकिन सूची नहीं है। दूसरे शब्दों में,

filter(func,data) #python 2.x 

बराबर है करने के लिए:

list(filter(func,data)) #python 3.x 

मुझे लगता है कि यह बदल गया था क्योंकि आप (अक्सर) में एक आलसी अर्थ में छानने क्या करना चाहते हैं - आप का उपभोग करने की जरूरत नहीं है सभी मेमोरी सामने की सूची बनाने के लिए, जब तक कि इटरेटर एक ही चीज लौटाए, एक सूची पुनरावृत्ति के दौरान होगी।

यदि आप सूची comprehensions और जनरेटर भाव से परिचित हैं, ऊपर फ़िल्टर अब (लगभग) python3.x में निम्नलिखित के बराबर है:

[ x for x in data if func(x) ] 
:

(x for x in data if func(x)) 

के रूप में करने का विरोध किया

पायथन 2.x

+0

बहुत बहुत धन्यवाद। साथ ही, कृपया आप मुझे बता सकते हैं कि यह संख्या 0x00FDC550 – user1190882

+3

क्या है यह ऑब्जेक्ट की आईडी है। सीपीथॉन में, यह स्मृति स्थान है। – mgilson

+1

वाह ... दिलचस्प ... मैंने सोचा [] एसएनडी सूची() समकक्ष हैं, लेकिन [फ़िल्टर (func, डेटा)] एक ही – user2846569

19

यह filter फ़ंक्शन द्वारा लौटाया गया है।

आप एक सूची चाहते हैं, बस

list(filter(f, range(2, 25))) 

कर बहरहाल, तुम सिर्फ एक for पाश के साथ इस वस्तु पर पुनरावृति कर सकते हैं।

for e in filter(f, range(2, 25)): 
    do_stuff(e) 
+0

बहुत बहुत धन्यवाद। इसके अलावा, कृपया आप मुझे बता सकते हैं कि यह संख्या 0x00FDC550 – user1190882

+0

यह वस्तु का स्मृति पता है। ऑब्जेक्ट को प्रिंट करते समय यह डिफ़ॉल्ट आउटपुट होता है यदि उस ऑब्जेक्ट की कक्षा में ['__repr__()'] (http://docs.python.org/library/functions) नहीं है।html # repr) विधि जिसका उपयोग आउटपुट को नियंत्रित करने के लिए किया जाता है। – sloth