10

リストの要素に特定の文字列が含まれているかどうかを調べたい。文字列が見つかった場合は「文字列が見つかりました」、そうでない場合は「文字列が見つかりません」と出力します。しかし、私が思いついたコードは、「文字列が見つかりません」という複数の出力を作成します。理由はわかっていますが、それを修正してメッセージの1つだけを一度だけ印刷する方法がわかりません。

animals=["dog.mouse.cow","horse.tiger.monkey",
         "badger.lion.chimp","trok.cat.    bee"]
      for i in animals :
          if "cat" in i:
              print("String found")
          else:
              print("String not found")

4

4 に答える 4

13

文字列が見つかったらブロックにbreakステートメントを追加し、 for ループの に移動します。この場合、文字列が見つかった場合、ループは中断され、else に到達することはありません。ループが中断されない場合は、else に到達して出力されます。ifelseelse'String not found'

for i in animals:
    if 'cat' in i:
        print('String found')
        break
else:
    print('String not found')
于 2013-09-12T12:10:45.170 に答える
3

これを 1 行で行うより短い方法があります。:)

>>> animals=["dog.mouse.cow","horse.tiger.monkey","badger.lion.chimp","trok.cat.    bee"]
>>> print "Found" if any(["cat" in x for x in animals]) else "Not found"
Found
>>> animals = ["foo", "bar"]
>>> print "Found" if any(["cat" in x for x in animals]) else "Not found"
Not found

これは、リスト内のすべての項目が False の場合、sum は 0 を返し、それ以外の場合は正の数 (True) を返すという事実に依存しています。

于 2013-09-12T12:17:33.027 に答える
1

next()も使用できます。

next(("String found" for animal in animals if "cat" in animal), "String not found")

デモ:

>>> animals=["dog.mouse.cow","horse.tiger.monkey","badger.lion.chimp","trok.cat.    bee"]
>>> next(("String found" for animal in animals if "cat" in animal), "String not found")
'String found'
>>> animals=["dog.mouse.cow","horse.tiger.monkey"]
>>> next(("String found" for animal in animals if "cat" in animal), "String not found")
'String not found'
于 2013-09-12T12:11:32.067 に答える