2012-07-31 11 views
10

मान लीजिए मैं एक सूचीवहाँ दो उपयोग करने के लिए एक रास्ता है, तो अजगर में सूची comprehensions में स्थिति

my_list = ['91 9925479326','18002561245','All the best','good'] 

था अब मैं

नीचे
result = [] 
for i in my_list: 
    if not '91' in i: 
     if not '18' in i: 
     result.append(i) 
तरह 91 और 18 के साथ शुरू की सूची में तार अनदेखा करना चाहते

तो यहां मैं सूची समझ के साथ इसे प्राप्त करना चाहता हूं। क्या सूची में बदलाव की स्थिति में दो लिखने के लिए वैसे भी है?

किसी को भी मुझे पता पहले से

धन्यवाद सूची comprehensions साथ ऊपर कैसे करना है चलो सकता है ............

+0

@jamylak: मैं ले लिया था कि एक उदाहरण के रूप वैसे भी संपादन के लिए धन्यवाद। –

+5

सावधान रहें कि आपके परीक्षण सिर्फ जांच करें कि स्ट्रिंग की _any_ स्थिति में '91' और' 18' मौजूद हैं या नहीं। आपको इसके बजाय 'str.startswith' का उपयोग करना चाहिए: http://docs.python.org/library/stdtypes.html#str.startswith –

उत्तर

14
[i for i in my_list if '91' not in i and '18' not in i] 

नोट आप list उपयोग नहीं करना चाहिए एक परिवर्तनीय नाम के रूप में, यह अंतर्निहित फ़ंक्शन को छाया करता है।

+1

(+1) सही उत्तर के लिए और i' में 'नहीं' 91 'को बदलने के लिए '9 'में नहीं' i '। – mgilson

+0

यह उत्तर जांचने के लिए दो मानों की बजाय दस में से पांच के रूप में जल्द ही संक्षिप्त और साफ नहीं हो जाता है। –

+0

क्या हम स्टार्टविथ फ़ंक्शन के साथ ऐसा ही कर सकते हैं क्योंकि कभी-कभी सूची में 91 से शुरू होने वाले स्ट्रिंग होते हैं और 18 से शुरू होने वाले कुछ बार होते हैं, जो कि 91 या 18 से शुरू होने वाले तारों को सूची से अनदेखा किया जाना चाहिए। वास्तव में यहां तार फोन नंबर 91 9885564213 और 1800 3236 2365 –

1

आप "मर्ज" कर सकते हैं दोनों स्थितियों:

if ((not '91' in i) and (not '18' in i)) 
+3

से नीचे या [डीमोर्गन लॉ] (http://en.wikipedia.org/wiki/De_Morgan%27s_laws) का उपयोग करके सरल बनाएं: ' यदि नहीं (i में '91' i या '18' i) – Blckknght

7

आप दो से अधिक मान (91 और 18) है, तो या वे गतिशील उत्पादित कर रहे हैं यह इस निर्माण का उपयोग करने के लिए बेहतर है:

[i for i in my_list if not i.startswith(('91', '18'))] 

या आप अगर 91 और 18 (शुरुआत में न केवल) तार में हैं जाँच करने के लिए, in बजाय startswith का उपयोग करना चाहते हैं:

01,235,164 उपयोग के
[i for i in my_list if all(x not in i for x in ['91', '18'])] 

उदाहरण:

>>> my_list = ['91 9925479326','18002561245','All the best','good'] 
>>> [i for i in my_list if all(not i.startswith(x) for x in ['91', '18'])] 
['All the best', 'good'] 
>>> 
+1

मैं पसंद करता हूं: '[i के लिए मैं my_list में अगर कोई नहीं (i.startswith (x) x के लिए [' 91 ',' 18 ']]] 'लेकिन मुझे लगता है कि यह व्यक्तिगत वरीयता है – jamylak

+1

'.startswith' स्ट्रिंग्स का एक टुपल भी स्वीकार करता है, इसलिए इसे छोटा कर दिया जा सकता है' [i i my_list में अगर मैं i.startswith (('91', '18') नहीं)]' । – MRAB

+0

@ एमआरबीबी: सही संकेत के लिए धन्यवाद! मैंने जवाब अपडेट किया और इसमें अपना संस्करण जोड़ा। आपका बहुत बहुत धन्यवाद –

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