Длительный логический поиск строк в python

Я пытаюсь найти набор строк для определенного набора слов и выполнять некоторые действия, если выполняются различные логические условия. У меня в настоящее время есть подход, который работает, но я надеюсь, что есть более элегантный способ, чем то, что у меня есть.

strings = ['30 brown bears', '30 brown foxes', '20 green turtles', '10 brown dogs'] for text in strings: if ('brown' in text) and ('bear' not in text) and ('dog' not in text): print text 

Это работает по желанию и печатает 30 brown foxes . Тем не менее, что касается меня, это добавление дополнительных терминов к поиску. Например, что, если «кошка», «мышь», «кролик» и т. Д. Все добавлены в if-statement ? Кажется, это неуклюжий и непитонический подход к вещам, поэтому я надеюсь, что у кого-то есть другой способ сделать это.

    Я сомневаюсь, что это лучший способ, но одна вещь, которую вы можете сделать, – это использовать all в сочетании с двумя другими объектами управления – такими, которые содержат элементы, которые вы хотите включить ( brown , в данном случае), и другие, которые включают те, которые вы хотите игнорировать:

     In [1]: strings = ['30 brown bears', '30 brown foxes', '20 green turtles', '10 brown dogs'] In [2]: keep = ('brown') In [3]: ignore = ('bear', 'dog') In [4]: for text in strings: ...: if all([k in text for k in keep] + [i not in text for i in ignore]): ...: print text ...: ...: 30 brown foxes 
     >>> strings = ['30 brown bears', '30 brown foxes', '20 green turtles', '10 brown dogs'] >>> conditions = [('brown', True), ('bear', False), ('dog', False)] >>> for text in strings: if all((x in text) == c for x,c in conditions): print text 30 brown foxes