python中字符串的冗长布尔搜索

时间:2012-12-27 20:16:40

标签: python full-text-search boolean

我正在尝试为一组特定的单词搜索一组字符串,并在满足各种布尔条件时执行一些操作。我目前有一种方法可行,但我希望有一种比我更优雅的方式。

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。然而,我担心的是在搜索中添加更多术语。例如,如果'cat','mouse','rabbit'等都添加到if-statement怎么办?这似乎是一种笨重而非Pythonic的方式来处理事情,所以我希望有人有不同的方式来完成这项工作。

2 个答案:

答案 0 :(得分:4)

我怀疑这是最好的方法,但你可以做的一件事是将all与另外两个控制对象结合使用 - 一个包含你想要包含的项目(brown,在此case),以及包括你想忽略的那些:

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

答案 1 :(得分:2)

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