2017-08-09 28 views
-2

私は再帰的に特定の要素の組み合わせを取得しました。 a = ['a1', 'a2', 'a3'], b = ['b1', 'b2'], c = ['c1', 'c2', 'c3']python - 再帰的にリストを更新できません

については

を私は

[['a1', 'b1', 'c1'],['a1', 'b1', 'c2'],['a1', 'b1', 'c3'],['a1', 'b2', 'c1'],['a1', 'b2', 'c2'],['a1', 'b2', 'c3'],['a2', 'b1', 'c1'],['a2', 'b1', 'c2'],['a2', 'b1', 'c3'],['a2', 'b2', 'c1'],['a2', 'b2', 'c2'],['a2', 'b2', 'c3'],['a3', 'b1', 'c1'], 
['a3', 'b1', 'c2'],['a3', 'b1', 'c3'],['a3', 'b2', 'c1'],['a3', 'b2', 'c2'],['a3', 'b2', 'c3']] 

ている可能性のある組み合わせを取得したいが、結果はどのような私ではありません。:はIndexErrorが発生したとき、私は組み合わせを取得(一部を除くで)

欲しいです。

[['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3']] 

最後の組み合わせのみが出てきます。

ここに私のコードです。私は正しい方法を教えてくれてありがとうと思います。

a = ['a1', 'a2', 'a3'] 
b = ['b1', 'b2'] 
c = ['c1', 'c2', 'c3'] 

def loop(lst, combi, combi_set, index=0): 
    try: 
     for a in lst[index]: 
      if len(combi) == len(lst): 
       for n, i in enumerate(combi): 
        if i.startswith(a[0]): 
         combi[n] = a 
      else: 
       combi.append(a) 

      loop(lst, combi, combi_set, index=index + 1) 

    except IndexError: 
     print(combi) 
     combi_set.append(combi) 
     return 

set = [] 
loop([a, b, c], [], set, 0) 
print(set) 
+0

が、これは特定のexcersiseですかあなただけのcarthesian製品が必要なのでしょうか?後者の場合、 'itertools.product(a、b、c)'を使用して、このホイールを再作成しないでください。 –

+0

同じリストを何度も何度も繰り返し使用しています。そのリストを 'combi_set'に追加すると、**一つのリスト**への参照のリストになります。代わりにコピーを作成します。 –

答えて

-1

インポートitertools

「、[ 'B1'、 'B2']、[ 'C1'、C2 ''] I = [ 'A1 ' A2'、 'A3' C3' ]]

印刷リスト(itertools.product(* i))を

関連する問題