2008-11-14 11 views
29

द्वारा एक अजगर सूची मैं की तरह कुछ करने के लिए चाहते हो जाएगा फ़िल्टर?विधेय

मैं जानता हूँ कि यह रोल अपने खुद के लिए यहां बहुत आसान है, लेकिन मैं एक और अधिक मानक तरीका के लिए देख रहा हूँ।


>>> lst = [1, 2, 3, 4, 5] 
>>> filter(lambda x: x % 2 == 0, lst) 
[2, 4] 

या एक सूची समझ:

उत्तर

46

आप फिल्टर विधि का उपयोग कर सकते हैं


>>> lst = [1, 2, 3, 4, 5] 
>>> [x for x in lst if x %2 == 0] 
[2, 4] 

संपादित करें: खोज (एक तत्व) के लिए, आप की कोशिश कर सकते:


>>> (x for x in lst if x % 2 == 0).next() 
2 

हालांकि अगर कुछ भी मेल नहीं खाता तो अपवाद फेंक देगा, तो शायद आप इसे कोशिश/पकड़ में लपेटना चाहते हैं।() ब्रैकेट इसे सूची समझ के बजाय जनरेटर अभिव्यक्ति बनाते हैं।

निजी तौर पर मैं बस नियमित फिल्टर/समझ का उपयोग करें और पहला तत्व ले (यदि वहाँ एक है) चाहते हैं।

ये एक अपवाद बढ़ा अगर कुछ

filter(lambda x: x % 2 == 0, lst)[0] 
[x for x in lst if x %2 == 0][0] 

पाया जाता है ये खाली सूचियों

filter(lambda x: x % 2 == 0, lst)[:1] 
[x for x in lst if x %2 == 0][:1] 
+1

धन्यवाद वापसी! यह खोज के लिए है। खोजने के बारे में क्या? –

+1

जनरेटर समझ की बजाय, आप itertools.ifilter (func, list) .next() का भी उपयोग कर सकते हैं जो वांछित वाक्यविन्यास के करीब है। – Brian

+3

तुम भी itertools.dropwhile (लैम्ब्डा एक्स: नहीं समारोह (x), सूची) का उपयोग कर सकते हैं जो एक अपवाद फेंका नहीं होंगे सूची में कोई तत्व यह है कि विधेय को संतुष्ट करता है को शामिल करना चाहिए। यह भी लाभ है कि शॉर्ट सर्किट सूची के अंत से पहले वांछित तत्व हो सकता है। – EfForEffort

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