如何处理嵌套 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)
我正在寻找一种方法来遍历两个有时可能为空的列表的乘积。 我打算为此使用 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)