list = ["apples", "oranges", "jerky", "tofu"]

if "chew" in action and list[:] in action:
    print "Yum!"
else:
    print "Ew!"

¿Cómo tengo una verificación lógica donde verifica si hay "masticación" en acción y CUALQUIER valor en la lista? Por ejemplo, quiero imprimir "¡mmm!" si la acción es "masticar naranjas" o "masticar cecina".

2
TomKo 5 ago. 2011 a las 09:12

5 respuestas

La mejor respuesta

¿Por qué no utilizar la función any() incorporada? Lo siguiente me parece bastante pitónico:

foods = ["apples", "oranges", "jerky", "tofu"]

if "chew" in action and any(f in action for f in foods):
    print "Yum!"
else:
    print "Ew!"

Por supuesto, solo buscar subcadenas simples puede dar algunos resultados extraños. Por ejemplo, "jerkeyblahchew" aún coincidiría con la categoría "Yum!". Probablemente desee dividir action en palabras y buscar nombres de alimentos que sigan inmediatamente a "chew" (como sugiere @Peter Lyons en su respuesta para el caso simple donde las dos primeras palabras serían {{ X4}}).

Ignorando el orden, podría enfocarse solo en palabras separadas por espacios (e ignorar aún más las mayúsculas / minúsculas) usando algo como lo siguiente:

foods = ["apples", "oranges", "jerky", "tofu"]
action_words = set(word.lower() for word in action.split())

if "chew" in action_words and any(f in action_words for f in foods):
    print "Yum!"
else:
    print "Ew!"
6
Greg Haskins 5 ago. 2011 a las 18:25

x in y significa "mirar cada uno de los elementos de y a su vez; ¿alguno de ellos es igual a x?" Entonces, la lógica obviamente no es correcta: list (una mala idea para un nombre de variable, por cierto, ya que ese es el nombre del tipo) es una lista de cadenas, y action es una cadena - los elementos de una cadena son letras, y ninguna letra puede ser igual a una lista de cadenas.

0
Karl Knechtel 5 ago. 2011 a las 06:06

Parece que quiere hacer alguna operación de configuración aquí (intersección).

Suponiendo que action es una cadena base que contiene palabras:

foods = set(["apples", "oranges", "jerky", "tofu"])
actionWords = set(action.split())

if "chew" in action and foods & actionWords:
    print "Yum!"
else:
    print "Ew!"

El operador & en un conjunto significa intersección, consulte documento de Python.

0
Jeannot 5 ago. 2011 a las 07:48
if "chew" in action and action.split()[1] in list:
    print "Yum!"
else:
    print "Ew!"
4
Peter Lyons 5 ago. 2011 a las 05:16

En primer lugar, no use la lista como nombre de variable. Es una palabra clave en python.


_list = ["apples", "oranges", "jerky", "tofu"]
bools = [True for a in action.split() if a in (_list + ["chew"])]
if True in bools:
    print "Yum!"
else:
    print "Ew!"
0
Bryce Siedschlaw 5 ago. 2011 a las 05:39