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

'aa'を含むすべての項目のインデックス位置が必要です。私はenumerate()と部分文字列のマッチングを組み合わせるのに問題があります。私は列挙を使用すべきかどうかもわかりません。私はちょうどインデックス位置返す必要がpython - 部分文字列に基づくリストのインデックス位置を見つける

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

あなたの考えは正しかったです。また

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

、リスト内包として:enumerate()なし

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

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

これはO(n^2)で実行される可能性がありますが、enumerateはO(n)になります。 – Johnsyweb

+1

'aa'を含む文字列のいずれかが重複していると、これは間違った結果を返します。 –