Pythonic方法生成包含来自另一个列表的片段的字符串列表?

时间:2014-06-21 19:49:38

标签: python

我写了一些过于复杂的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())来获取唯一的项目。

2 个答案:

答案 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]