2016-03-19 12 views
0

search_stringのすべての要素がリストlook_here_stringの文字列のいずれかに存在するかどうかを調べようとしています。効率の理由から、1つの要素が存在しない場合、単語はリストから削除されます。文字列のすべての項目の文字列を検索する

search_string = '1abc' 
look_here_string = ['dedakloera', 'tuau', '1abcdefg'] 
x = 0 
counter = 0 

for item in search_string: 
    item = search_string[counter] 
    #print item, search_string, look_here_string[x] 
    if not item in look_here_string[x]: 
     print item, 'not in', look_here_string[x] 
     look_here_string.remove(look_here_string[x]) 
     counter = 0 
    else: 
     print item, 'in', look_here_string[x] 
     counter +=1 

これは私が探しています出力されます:

1 not in dedakloera  
1 not in tuau   
1 in 1abcdefg   
a in 1abcdefg   
b in 1abcdefg   
c in 1abcdefg 

これは、私が手に出力されます:「スクリプトが途中で停止しているようです

1 not in dedakloera #correct 
1 not in tuau   #correct 
1 in 1abcdefg   #correct 
a in 1abcdefg   #correct 

が、私はすることができます私のコードで何が間違っているのか理解していない。あなたの助けが大変ありがとう!これは、作成し

>>> search_string = '1abc' 
>>> look_here_string = ['dedakloera', 'tuau', '1abcdefg'] 
>>> [string for string in look_here_string 
      if all(char in string for char in search_string)] 

+1

'for item in search_string:'はn = len(search_string)だけを反復するため、出力を4回しか出力しないためです。 – ZdaR

+0

どうすればこの問題を解決できますか? –

答えて

1

もっと単純なアプローチは、外側のループにlook_here_stringを反復処理するために

search_string = '1abc' 
look_here_string = ['dedakloera', 'tuau', '1abcdefg'] 
ind_to_remove = [] 
for i,s in enumerate(look_here_string): 
    for e in search_string: 
     if not e in s: 
      ind_to_remove.append(i) 
      print e, 'not in', s 
      break 
     else: 
      print e, 'in', s 
for i in ind_to_remove[::-1]: 
    del look_here_string[i] 
+0

この入力いただきありがとうございます:あなたのコードを正しく理解していれば、不在の文字列のインデックスのリストを作成してから、このリストに基づいてlook_here_stringからアイテムを削除します。これは多くの助けになりました! –

+0

@Johannes Schwaningerようこそ)はい、すべて正しく理解しています。 – kvorobiev

1

であるあなたは、「すべての」組み込み関数とリストの内包表記を使用して、より簡潔に書くことができ新しいリストですが、無効な文字列を自動的にフィルタリングします。

+1

非常に簡潔なコード! - 「すべて」の使用を提案してくれてありがとう –

関連する問題