冗长的布尔搜索字符串在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中会怎么样?这似乎是一个笨拙的和非python的方式来处理事情,所以我希望有人有一个不同的方式来做到这一点。

我怀疑这是最好的方法,但是您可以做的一件事是将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

最新更新