2

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

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 的处理方式,所以我希望有人有不同的方式来完成这项工作。

4

2 回答 2

4

我怀疑这是最好的方法,但是您可以做的一件事是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
于 2012-12-27T20:29:26.977 回答
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
于 2012-12-27T20:29:15.987 回答