我正在尝试为一组特定的单词搜索一组字符串,并在满足各种布尔条件时执行一些操作。我目前有一种方法可行,但我希望有一种比我更优雅的方式。
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的方式来处理事情,所以我希望有人有不同的方式来完成这项工作。
答案 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