Imprimir mensaje solo una vez desde el bucle for

Quiero encontrar si una cadena específica está contenida dentro de los elementos de una lista. Si se encuentra la cadena, quiero imprimir “Cadena encontrada”, de lo contrario “Cadena no encontrada”. Pero, el código que se me ocurrió, hace varias impresiones de “Cadena no encontrada”. Sé el motivo, pero no sé cómo arreglarlo e imprimirlo solo uno de los mensajes una vez.

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") 

~

Agregue una statement de break en el bloque if cuando se encuentre la cadena y mueva la else para que sea la else del bucle for. Si este es el caso, si se encuentra la cadena, el bucle se romperá y nunca se alcanzará el rest, y si el bucle no se rompe, se alcanzará la otra cosa y se imprimirá 'String not found' .

 for i in animals: if 'cat' in i: print('String found') break else: print('String not found') 

Hay una forma más corta de hacer esto en una línea. 🙂

 >>> 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 

Esto se basa en el hecho de que la sum devolverá 0 si cada elemento de la lista es Falso y, de lo contrario, devolverá un número positivo (Verdadero).

any devuelve True si bool(x) es True para cualquier x en el iterable pasado a él. En este caso, la expresión generadora "cat" in a for a in animals . Que comprueba si "cat" está contenido dentro de cualquiera de los elementos dentro de la lista de animals . Este método tiene la ventaja de no tener que recorrer toda la lista en todos los casos.

 if any("cat" in a for a in animals): print "String found" else: print "String not found" 

También puedes usar next () :

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

MANIFESTACIÓN:

 >>> 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'