我写了一些过于复杂的lambda来做这件事,但我想简化。我基本上想要一个包含列表中一个片段的字符串列表。
示例:
strings = ["asdf", "foo", "bar", "food"]
frags = ["foo", "ar"]
会导致["foo", "food", "bar"]
类似于:[[s for s in string if f in s] for f in frags]
之所以会产生[["foo", "food"], ["bar"]]
,但我需要一个单独的列表,然后我会列出(set())来获取唯一的项目。
答案 0 :(得分:2)
>>> [s for s in strings if any(f in s for f in frags)]
['foo', 'bar', 'food']
这种方法的优点是any()
短路,一旦找到匹配就中止(这也意味着如果多个片段碰巧匹配a,你就不会获得重复的项目字符串)。
您可以直接生成set
(除非您在strings
中有重复项,否则您不需要):
>>> {s for s in strings if any(f in s for f in frags)}
{'bar', 'food', 'foo'}
答案 1 :(得分:1)
您可以轻松地将它们组合在一起:
[s for s in strings for f in frags if f in s]