2013-11-01 14 views
52

私は自分自身が繰り返し同じコードのチャンクを書く見つける:リストに文字列を含む文字列を調べる最も簡単な方法は?

def stringInList(str, list): 
    retVal = False 
    for item in list: 
     if str in item: 
      retVal = True 
    return retVal 

は、私が少ないコードで/迅速にこの機能を書くことができる方法はありますか? 私は通常このように、if文でこれを使用します。

if stringInList(str, list): 
    print 'string was found!' 
+8

+1「ただの方法はありますか」と言うだけでなく、実際にあなたが持っていたことを示しているだけではありません。 Well done – TerryA

+5

その関数に 'retVal'というローカル変数は必要ありません。見つかったら' return True'、そうでない場合は 'False'です。不要なループをスキップします。 (そしてはい、単に 'any'を使用してください) – roippi

+1

ちょっと不思議なことに、なぜこれを何度も何度も必要とし続けていますか?私はユースケースを考えることができません。 –

答えて

77

はい、any()を使用:ドキュメントとして

if any(s in item for item in L): 
    print 'string was found!' 

言うまでもなく、これはかなり同等のあなたの関数にですが、any()を取ることができますジェネレータの式は文字列とリストの代わりにany()の短絡です。 s in itemがTrueになると、関数はブレークします(retVal = Truereturn Trueに変更するだけで、関数でこれを行うことができます)。


あなたは、文字列strとリストlistを付けないようにする必要があります。これはビルトイン型をオーバーライドします。

+0

ニースの答え、ええ。 – aIKid

+1

+1平易でシンプルですが、依然として非常に便利な答えです。 – Houssni

+3

'any'は、@ roippiのコメントに与えられたものと同等の効率上の利点を持っています。本当の要素の最初のインスタンスでは' true'を返し、真の要素に遭遇することなく終わりに行くなら 'false'同等のコードhttp://docs.python.org/2/library/functions.html#any) – Silverfish

関連する問題