输入:
我有一个可以工作的地方的字符串列表:
ALL_CHANCES = ['I can work in China',
'I can work in Germany',
'I can work in Singapore',
'I can work in Norway']
我还有另一个字符串列表,这些字符串最好不要使用:
HIGH_TAX = ['Germany',
'Norway']
输出:
我正在寻找一种简单的列表理解单线过滤器,以过滤列表1中包含出现在列表2中的子字符串的项目:
GOOD_CHANCES = ['I can work in China',
'I can work in Singapore']
挑战:
但是,当我这样做
GOOD_CHANCES = [item for item in ALL_CHANCES
if (not any(word for word in HIGH_TAX) in item)]
我产生以下错误:
'<string>' requires string as left operand, not bool
如何将布尔条件包括到python的列表理解中?
最佳答案
您可以按照以下步骤进行简化:
GOOD_CHANCES = [item for item in ALL_CHANCES \
if not any(word in item for word in HIGH_TAX)]
在您的解决方案中,
not any(word for word in HIGH_TAX)
评估为bool
,然后将其与字符串item
进行比较。而是如上所述,您可以在any
方法调用本身中包含子字符串检查使用
filter
方法可能也更清楚:filter(lambda item: not any(word in item for word in HIGH_TAX), ALL_CHANCES)