首页 > 解决方案 > 美化/缩短连接的for循环

问题描述

我正在检查字符串列表是否包含特定的子字符串。根据条件,列表中的字符串被添加到另一个列表中,或者分别被排除在外。

这就是我到目前为止所拥有的。它正在工作,但是连接了很多循环。有没有更好(或更多python esque)的方式来写这个?

varNams = ['fee1.foo.bar','fee1.foo','fee2.foo.bar','fee2.foo']
selection = []

sub_incl = ['foo']
sub_excl = ['bar']

for i in range(len(varNams)):
    for sub_in in sub_incl:
        for sub_ex in sub_excl:
            if sub_in in varNams[i] and sub_ex not in varNams[i]:
                selection.append(varNams[i])

标签: pythonfor-loop

解决方案


您可以itertools.product在列表理解中使用。

from itertools import product

varNams = ['fee1.foo.bar','fee1.foo','fee2.foo.bar','fee2.foo']

sub_incl = ['foo']
sub_excl = ['bar']

res = [i for i in varNams for sub_in, sub_ex in product(sub_incl, sub_excl) if sub_in in i and sub_ex not in i]
print(res)

输出

['fee1.foo', 'fee2.foo']

推荐阅读