Python itertools:笛卡尔积,过滤空字符串

时间:2016-02-09 15:16:20

标签: python itertools

我正在编写一个脚本来调用一个包含所有可能的命令行参数的程序。其中一些论点可能不存在。尝试#1:

args1 = ['program.exe']
args2 = ['1', '5', '']
args3 = ['--foo', '']
for args in itertools.product(args1, args2, args3):
    args = [arg for arg in args if arg != '']
    subprocess.call(list(args))

有没有其他方法可以获得这些排列而无需手动过滤掉空字符串?如果我把它留在参数列表中,事情会中断。我的意思是,我的方法有效,但我觉得会有更多的内置方法来处理这个问题。虽然阅读this question让我觉得不太可能。

1 个答案:

答案 0 :(得分:1)

如果你希望它看起来更清洁,你可以使用内置的filter()函数。

args = filter(lambda x: not x, args)

或者如果你不喜欢lambda

args = filter(not_empty, args)

----

def not_empty(x):
    return not x

我不知道只使用itertools函数执行此操作的方法。