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