仅将填充列表传递给 for 循环

Passing only populated lists to for loop

我有四个列表:

list1=[1,2,3,4,5,6,7,8,9]
list2=['a','b','c','d','e','f']
list3=['one','two','three','four','five','six','seven']
list4=[]

我正在尝试运行以下代码生成这些列表内容的所有可能产品:

for i in itertools.product(list1,list2,list3,list4):
    print(i)

当输入只有 list1、list2 和 list3 时,它完美地工作。但是,给出一个空列表也会产生空白输出。这是有问题的,因为这四个列表中的一个总是空的,我不知道它会是哪个。

有没有办法只将填充列表的名称传递给 for 循环?我不确定生成器表达式应该去哪里,我认为这可能是这里的答案。

使用filter删除空列表。您可以使用 filter(bool, (list1,list2,list3,list4))filter(None, (list1,list2,list3,list4)) 来过滤列表

for i in itertools.product(*filter(bool, (list1,list2,list3,list4))):
    print(i)