2013-02-13 19 views
27
mylist = ["aa123", "bb2322", "aa354", "cc332", "ab334", "333aa"] 

मुझे 'aa' वाले सभी आइटमों की अनुक्रमणिका स्थिति की आवश्यकता है। मुझे आंशिक स्ट्रिंग मिलान के साथ enumerate() संयोजन में परेशानी हो रही है। मुझे यह भी यकीन नहीं है कि मुझे गणना का उपयोग करना चाहिए या नहीं।पायथन - आंशिक स्ट्रिंग के आधार पर सूची में इंडेक्स स्थिति

मैं सिर्फ सूचकांक पदों वापस जाने के लिए की जरूरत है: 0,2,5

उत्तर

52
indices = [i for i, s in enumerate(mylist) if 'aa' in s] 
+0

भयानक और सही ... आपको बहुत बहुत धन्यवाद। –

+0

आप इसे असंवेदनशील कैसे बना सकते हैं? – abbood

+0

@abbood - 's.lower()' – StoryTeller

9

आपका विचार का उपयोग करने के enumerate() सही था।

indices = [] 
for i, elem in enumerate(mylist): 
    if 'aa' in elem: 
     indices.append(i) 

वैकल्पिक रूप से, एक सूची समझ के रूप में:

indices = [i for i, elem in enumerate(mylist) if 'aa' in elem] 
5

enumerate() के बिना:

>>> mylist = ["aa123", "bb2322", "aa354", "cc332", "ab334", "333aa"] 
>>> l = [mylist.index(i) for i in mylist if 'aa' in i] 
>>> l 
[0, 2, 5] 
+5

यह ओ (एन^2) में चलाने की संभावना है, जबकि गणना का उपयोग ओ (एन) होगा। – Johnsyweb

+1

यदि कोई 'ए' युक्त तारों में से एक डुप्लिकेट किया गया है तो यह गलत परिणाम देगा। –

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