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

您可以按如下方式简化操作:

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)

最简单的方法是:

[item for item in ALL_CHANCES if item.split()[-1] not in HIGH_TAX]

这是假设所有国家都在句子的末尾。

如果这个国家可能在任何地方存在,你可以尝试:

[item for item in ALL_CHANCES if not any( h in item for h in HIGH_TAX )  ]

相关内容

  • 没有找到相关文章

最新更新