मेरे पास मूल्यों की एक सूची है जिसे मुझे मल की सूची में दिए गए मानों को फ़िल्टर करने की आवश्यकता है:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
मैं निम्नलिखित पंक्ति के साथ एक नई फ़िल्टर की गई सूची बनाता हूं:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
जिसके परिणामस्वरूप:
print filtered_list
[1,4]
लाइन काम करती है, लेकिन थोड़ा ओवरकिल दिखता है और मैं सोच रहा था कि क्या इसे हासिल करने का कोई सरल तरीका है।
सलाह
नीचे दिए गए उत्तरों में दी गई दो अच्छी सलाह का सारांश:
1- एक सूची का नाम नहीं है filter
जैसे मैंने किया क्योंकि यह एक अंतर्निहित कार्य है।
2- चीजों की तुलना ऐसे न करें True
जैसे मैंने किया है if filter[idx]==True..
क्योंकि यह अनावश्यक है। बस इस्तेमाल if filter[idx]
करना काफी है।
if filter[indx] == True
करो नहीं का उपयोग ==
आप के साथ पहचान के लिए जाँच करना चाहते हैं True
, का उपयोग करें is
। वैसे भी इस मामले में पूरी तुलना बेकार है, आप बस इस्तेमाल कर सकते हैं if filter[indx]
। अन्त में: एक चर / मॉड्यूल नाम के रूप में अंतर्निहित नाम का उपयोग कभी नहीं करें (मैं नाम का उल्लेख कर रहा हूं filter
)। कुछ का उपयोग करना included
, ताकि if
अच्छी तरह से पढ़ता है ( if included[indx]
)।