2015-12-17 64 views
1

注意,这不是这个问题的一个副本:获取关键字串从字符串列表在Python

How to check if a string contains an element from a list in Python

然而,它是基于它的逻辑。

我有以下字符串:

my_string = 'this is my complex description' 

我有一个关键字列表:

keywords = ['my', 'desc', 'complex'] 

我知道我可以使用以下方法来检查是否存在关键字:

if any(ext in my_string for ext in keywords): 
    print(my_string) 

但我想显示哪些关键字实际上符合描述。我知道我可以通过关键字进行循环,然后逐个检查每个关键字,但是可以在一个语句中进行检查吗?

python是哪个版本的解决方案并不重要。

+0

您可以使用匹配关键字构建列表comp。 '匹配= [关键字的关键字在关键字如果关键字在my_string]''。 –

回答

4

如果要匹配完整的单词,你可以使用交集:

>>> my_string = 'this is my complex description' 
>>> keywords = ['my', 'desc', 'complex'] 
>>> set(my_string.split()) & set(keywords) 
{'complex', 'my'} 
+0

该解决方案效果很好。谢谢。 – CodeLikeBeaker

1
>>> my_string = 'this is my complex description' 
>>> keywords = ['my', 'desc', 'complex'] 
>>> print(*[c for c in my_string.split() if c in keywords]) 
my complex 

注意:此这只作品,据我所知,在python3.x(我不太确定它是如何站在蟒蛇2)

如果你困惑于它在做什么,*只是将列表解析制作的列表解压缩,将列表理解过滤为my_string中的任何ISNT作为print中的单独参数。在python3中,print中的单独参数在它们之间打印有空格。

0
found_words = [ word for word in keywords if word in my_string ] 

这会给你在my_string发现关键字的列表。性能会更好,如果你做的关键字set虽然:

keywords = set(['my', 'desc', 'complex']) 
found_words = [ word for word in my_string.split() if word in keywords ] 

但后者依赖于一个事实,即my_string没有单独的词与除空白,任何东西。