2013-02-13 10 views

Odpowiedz

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

niesamowite i doskonały ... dziękuję bardzo. –

+0

jak możesz sprawić, by nie było w nim mowy bez względu na wielkość liter? – abbood

+0

@abbood - porównując do 's.lower()' – StoryTeller

9

Twój pomysł na wykorzystanie enumerate() była prawidłowa.

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

Alternatywnie, jako listowego:

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

Bez 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

To prawdopodobnie będzie działać w O (n^2), podczas gdy użycie wyliczenia będzie O (n). – Johnsyweb

+1

To zwróci zły wynik, jeśli jeden z ciągów zawierających "aa" zostanie zduplikowany. –

Powiązane problemy