我正在尝试将三个列表传递给一个函数,然后迭代列表中的所有值,然后将它们激活到另一个函数中:
def main():
l1 = [0,1]
l2 = [1,5,10,20]
l3 = [15]
my_func(l1,l2,l3)
def my_func(l1, l2, l3):
nested = ((x,y,x) for x in l1 for y in l2 for z in l3)
for x,y,z in nested:
another_func(x,y,z)
def another_func(x,y,z):
...
但偶尔我需要传入一个None值作为其中一个列表:
l3 = None
这导致错误: TypeError:'NoneType'对象不可迭代,因为它在尝试迭代时不喜欢None值。
我想知道如果它们的值为None,是否有任何方法可以从迭代中排除列表?
答案 0 :(得分:1)
在这里,我浏览了所有列表,将None
替换为(None,)
,这是一个元组,因此是可迭代的
from itertools import repeat, product
def my_func(*lists):
for group in product(*(l if l is not None else (None,) for l in lists)):
another_func(*group)
答案 1 :(得分:0)
所以我认为我正在寻找的是:
list(itertools.product(*filter(None, (a,b,c))))
这将遍历所有可能的迭代并过滤无的列表。