2016-08-12 32 views
0

は私がリストにmatch = ['one', 'two', 'three']一致する文字列

を持っていると私は私はそれが内の項目のいずれかに一致した場合のみ、アイテムの操作をしたい引数foo = ['something', 'something_two', 'something', (...)]

のリストを持っていると言いますmatchリスト:

for each in foo: 
    for match_item in match: 
     if match_item not in each: 
      no_match = True 
      break 
    if no_match: 
     break 
    # do the desired operations 

しかし、私は'something_two''one'に対するまで来て、ループのすべてを壊したときに、それは試合を失敗しないように、それを作る方法がわかりません。 matchのアイテムは、fooのアイテムの文字列全体の一部にすぎません。そのため、matchのアイテムのリストをループしていました。

これに近づくにはどうすればよいでしょうか?

+0

「それぞれ一致したら:#do desired op」を実行できませんか? –

答えて

0

あなたが条件とジェネレータ式を使用して、リストを減らすことができます

for each in (item for item in foo if item in match): 
    # do the desired operations 

またはfilter機能使用して:

for each in filter(lambda item: item in match, foo): 
    # do the desired operations 
+0

'item'に' match [0] 'よりも多くの文字が含まれていると、最初の方法が動作しますか? 'each = 'something_one''と答えてください。一致は' 'one''だけです 私はそれを動作させるように見えません – Arturo

0

私は考えることができる最も簡単な方法は、

for item in foo: 
    if item in match: 
     # do desired operations 
です

またはリスト自体の操作を行う場合

for i in range(len(foo)): 
    if foo[i] in match: 
     # do desired operation on foo[i]