输入:
我有一个可以工作的地方的字符串列表:

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)

09-06 19:39