我有一个字符串列表,目前我可以搜索一个子字符串:
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']
答案 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)
我仍然喜欢map
和filter
,尽管反对意见以及理解如何总能取代map
和filter
。因此,这是一个map + filter + lambda
版本:
print filter(lambda x: any(map(x.__contains__,subs)), s)
其中包括:
过滤包含subs
中任何元素的s元素
我喜欢它如何使用带有强烈语义含义的单词,而不仅仅是if, for, in