如何处理嵌套 for 循环中的空列表?

How do I handle empty lists in nested for loops?

我正在寻找一种方法来遍历两个有时可能为空的列表的乘积。 我打算为此使用 itertools.product,所以它看起来像这样:

import itertools

list1 = [1, 2]
list2 = ['a', 'b']

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

我们会得到:

1 a
1 b
2 a
2 b

这就是我所期望的。但是当其中一个列表为空时,循环将不会打印任何内容:

list1 = [1, 2]
list2 = []
    
for i, j in itertools.product(list1, list2):
    print(i, j)

而我希望它表现得好像只有一个列表。因此,使用 itertools,相当于:

for i in itertools.product(list1):
    print(i)

会返回:

(1,)
(2,)

我可以将它放入一个长的 if 语句中,但我正在寻找一个简单的调整,如果列表数量增加,它可以轻松扩展。感谢您的帮助。

将它们放在一个变量中并过滤它们以仅使用 non-empty 个:

import itertools

lists = [1, 2], []

for i in itertools.product(*filter(bool, lists)):
    print(i)

或者如果将它们放在单独的变量中确实是您想要的:

import itertools

list1 = [1, 2]
list2 = []

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

两者的输出:

(1,)
(2,)

一种方法是检查是否有任何列表为空并输入一些值,但这不是最优雅的解决方案。例如:

import itertools

list1 = [1, 2]
list2 = []

if len(list2) == 0:
    list2.append("")

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