7

मेरे पास एक साधारण सूची है।स्थिति के साथ सूची समझ

>>> a = [0, 1, 2] 

मैं सूची समझ का उपयोग करके इसकी एक नई सूची बनाना चाहता हूं।

>>> b = [x*2 for x in a] 
>>> b 
[0, 2, 4] 

बहुत आसान है, लेकिन क्या होगा यदि मैं केवल nonzero तत्वों पर काम करना चाहता हूं?

'अगर' सूची की समझ में 'अन्य' की जरूरत है, तो मैं इसके साथ आया।

>>> b = [x*2 if x != 0 else None for x in a] 
>>> b 
[None, 2, 4] 

लेकिन वांछनीय परिणाम है।

>>> b 
[2, 4] 

मैं क्या कर सकते हैं इस तरह से

>>> a = [0, 1, 2] 
>>> def f(arg): 
...  for x in arg: 
...   if x != 0: 
...    yield x*2 
... 
>>> list(f(a)) 
[2, 4] 

या 'फिल्टर' और एक लैम्ब्डा

>>> a = [0, 1, 2] 
>>> list(filter(lambda x: x != 0, a)) 
[1, 2] 

का उपयोग कर रहा एक सूची समझ का उपयोग करते हुए इस परिणाम कैसे प्राप्त कर सकता है?

[ <item_expression> 
    for <item_variables> in <iterator> 
    if <filtering_condition> 
] 

हम इसे पसंद का समाधान कर सकते हैं:

उत्तर

12
b = [x*2 for x in a if x != 0] 

यदि आप अंत में अपनी हालत डाल आप पैटर्न के बाद किसी और एक (वास्तव में एक और को वहाँ नहीं हो सकता है) की जरूरत नहीं है

+0

आप मेरे नायक हैं। =) – selurvedu

5

:

>>> lst = [0, 1, 2] 
>>> [num 
... for num in lst 
... if num != 0] 
[1, 2] 

यह एक शर्त स्थिति "nonzero" मान बनाने के बारे में है।

+0

अधिक विस्तृत उत्तर के लिए धन्यवाद! – selurvedu

+0

अच्छी गहनता :) +1 –

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