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

Python itertools: Cartesian product with filtering of empty strings

我正在编写脚本来调用包含所有可能的命令行参数的程序。其中一些参数可能不存在。尝试 #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))

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

如果你想让它看起来更干净一点,你可以使用内置的 filter() 函数。

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

或者如果您不喜欢 lambda

args = filter(not_empty, args)

----

def not_empty(x):
    return not x

我不知道有什么方法可以只用 itertools 函数来做到这一点。