簡體   English   中英

Pythonic方式生成包含另一個列表中的片段的字符串列表?

[英]Pythonic way to generate list of strings containing a fragment from another list?

我已經寫了一些過於復雜的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())以獲得唯一的物品。

>>> [s for s in strings if any(f in s for f in frags)]
['foo', 'bar', 'food']

這種方法的優點是any()短路,一旦找到匹配項就會中止(這也意味着,如果有多個片段匹配一個字符串,您將不會得到重復的項)。

而且,您可以直接生成一個set (盡管您不需要,除非您在strings有重復項):

>>> {s for s in strings if any(f in s for f in frags)}
{'bar', 'food', 'foo'}

您可以輕松地將它們組合:

[s for s in strings for f in frags if f in s]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM