2017-10-24 9 views
0

3つのリストを関数に渡して、リスト内のすべての値を反復して別の関数:ネストされたループで 'None'を渡すときに '' NoneType 'オブジェクトは反復不可能です "というエラーを回避します

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): 
    ... 

しかし時折私は、リストの一つとしてなし値に合格する必要があります:

l3 = None 

これはエラーになります:はTypeError:「NoneType」オブジェクトが反復可能ではありませんがなぜなら、trのときにNone値が好きではないからです繰り返す。

値がNoneの場合、リストを反復から除外する方法があるのでしょうか?すべての可能な繰り返しで

list(itertools.product(*filter(None, (a,b,c)))) 

この意志ループとなしのためのリストをフィルタリング:

+1

あなたは 'ネストされた=((x、y、z)を...'もしかして? –

+1

です'l3'は' None'です、 'z'の値は何を期待していますか? –

+0

私はそれらもNoneであると考えていましたが、それは間違っていますか? – mbadd

答えて

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) 
関連する問題