首页 > 解决方案 > 如何在 python 的列表理解中包含布尔条件?

问题描述

输入: 我有一个字符串列表,其中包含我可以工作的地方:

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 的列表理解中包含布尔条件?

标签: pythonstringlist-comprehensionboolean-logic

解决方案


您可以更简单地执行以下操作:

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)正在评估 a bool,然后将其与 string 进行比较item。相反,如上所示,您可以在any方法调用本身中包含子字符串检查

filter使用该方法也可能更清楚:

filter(lambda item: not any(word in item for word in HIGH_TAX), ALL_CHANCES)

推荐阅读