使用子字符串列表搜索字符串列表

时间:2014-07-09 13:24:46

标签: python string list substring

我有一个字符串列表,目前我可以搜索一个子字符串:

str = ['abc', 'efg', 'xyz']   

[s for s in str if "a" in s] 

正确返回

['abc']

现在让我们说我有一个子串列表:

subs = ['a', 'ef']

我想要一个像

这样的命令
[s for s in str if anyof(subs) in s] 

应返回

['abc', 'efg']

4 个答案:

答案 0 :(得分:2)

>>> s = ['abc', 'efg', 'xyz']  
>>> subs = ['a', 'ef']
>>> [x for x in s if any(sub in x for sub in subs)]
['abc', 'efg']

不要将str用作变量名,它是内置的。

答案 1 :(得分:0)

有点复杂,但你可以做到

[s for s in str if any([sub for sub in subs if sub in s])] 

答案 2 :(得分:0)

只需一个接一个地使用它们:

[s for s in str for r in subs if r in s]

>>> r = ['abc', 'efg', 'xyz']   
>>> s = ['a', 'ef']
>>> [t for t in r for x in s if x in t] 
['abc', 'efg']

答案 3 :(得分:0)

我仍然喜欢mapfilter,尽管反对意见以及理解如何总能取代mapfilter。因此,这是一个map + filter + lambda版本:

print filter(lambda x: any(map(x.__contains__,subs)), s)

其中包括:

  

过滤包含subs

中任何元素的s元素

我喜欢它如何使用带有强烈语义含义的单词,而不仅仅是if, for, in