2017-09-03 41 views
0

要通过字符串在Python我们可以使用下面的代码的另一个列表过滤字符串列表?例如:是否有可能通过Python中的另一个字符串列表来筛选子字符串列表?</p> <pre><code>result = [x for x in strings1 if x in strings2] </code></pre> <p>但如何才能通过字符串的另一个列表过滤字符串列表:

substrings = ['a', 'b', 'c'] 
strings = ['_b_', '_c_', '_d_'] 

的结果应该是:

result = ['b', 'c'] 
+0

用一个简单的列表理解:'[我为我的子字符串j中的字符串,如果我在j]' – coder

回答

1

您可以使用类似的东西:

[x for x in substrings if [y for y in strings if x in y]] 


In [1]: substrings = ['a', 'b', 'c'] 

In [2]: strings = ['_b_', '_c_', '_d_'] 

In [3]: [x for x in substrings if [y for y in strings if x in y]] 
Out[3]: ['b', 'c'] 
0

优雅的方式来实现这一目标是通过使用any列表理解为:

>>> substrings = ['a', 'b', 'c'] 
>>> my_strings = ['_b_', '_c_', '_d_'] 

>>> [s for s in substrings if any(s in i for i in my_strings)] 
['b', 'c'] 

这里any将返回True如果substrings任何字符串的形式存在,在my_strings子。一旦找到匹配项,它将短路迭代(不检查其他匹配项),并将返回结果作为True。由于any的短路属性,它不会在整个列表中进行不必要的迭代,从而获得更好的性能。

相关问题