2012-04-19 5 views
1

私はリストのリストを持っています。何かそんなこと言ってみましょう:この問題のスマート構文

somelist = [ 
       [1, 2, 3], 
       [4, 8, 2], 
       [7, 8, 4, 8, 2], 
      ] 

ここに私のリストには3つのリストがあります。

list1 = somelist[0] 
list2 = somelist[1] 
list3 = somelist[2] 

for l1 in list1: 
    for l2 in list2: 
     for l3 in list3: 
      function(something=[l1, l2, l3]) 

をしかし、私のリストには2 <= len(somelist) <= 10を持つことができます。len(list) == 3を持つリストで、私はこのような何かをしたいです。私のリストはlen(somelist) == 4を持っているのであれば私がしなければならない。

list1 = somelist[0] 
list2 = somelist[1] 
list3 = somelist[2] 
list4 = somelist[3] 

for l1 in list1: 
    for l2 in list2: 
     for l3 in list3: 
      for l4 in list4: 
       function(something=[l1, l2, l3, l4]) 

だから私の質問は、異なるlen(somelist)で動作します素敵なコードを記述する方法ですか?

答えて

5

私の事は----フラットは、ネストされたよりも優れています。

0

それを行うことが可能であるべきである、それは再帰的と毎回itertools.productリスト項目*args方法を展開します。あなたはitertools.product

import itertools 
for s in itertools.product(*somelist): 
    function(something=s) 

が必要