2016-12-21 11 views
1

これはおそらく簡単な問題ですが、私のコードは最後に外側forループを実行しています。数字の組み合わせごとにすべてのコンボをループする必要がありますforループが正しくループしていない

from itertools import permutations as p                            
combos = p(['/','*','-','+'], 3)                       
numbers = p(['9','7','7','6'])                              
for y in numbers:                                  
    print(y)                                   
    for x in combos:                           
     print(x)                                  

私は間違っていますか?それは出力します:

('9', '7', '7', '6') 
('/', '*', '-') 
('/', '*', '+') 
('/', '-', '*') 
('/', '-', '+') 
('/', '+', '*') 
('/', '+', '-') 
('*', '/', '-') 
('*', '/', '+') 
('*', '-', '/') 
('*', '-', '+') 
('*', '+', '/') 
('*', '+', '-') 
('-', '/', '*') 
('-', '/', '+') 
('-', '*', '/') 
('-', '*', '+') 
('-', '+', '/') 
('-', '+', '*') 
('+', '/', '*') 
('+', '/', '-') 
('+', '*', '/') 
('+', '*', '-') 
('+', '-', '/') 
('+', '-', '*') 
('9', '7', '6', '7') 
('9', '7', '7', '6') 
('9', '7', '6', '7') 
('9', '6', '7', '7') 
('9', '6', '7', '7') 
('7', '9', '7', '6') 
('7', '9', '6', '7') 
('7', '7', '9', '6') 
('7', '7', '6', '9') 
('7', '6', '9', '7') 
('7', '6', '7', '9') 
('7', '9', '7', '6') 
('7', '9', '6', '7') 
('7', '7', '9', '6') 
('7', '7', '6', '9') 
('7', '6', '9', '7') 
('7', '6', '7', '9') 
('6', '9', '7', '7') 
('6', '9', '7', '7') 
('6', '7', '9', '7') 
('6', '7', '7', '9') 
('6', '7', '9', '7') 
('6', '7', '7', '9') 
+0

出力するものは何ですか? – Max

+1

Python 3では、リストを返すのに(itertools.permutations'を含む)多くのものがジェネレータを返します。 –

+0

期待される出力の例を投稿できますか? – yorodm

答えて

6

itertools.permutationsはイテレータを生成します。それは消費することができることを意味します。一度消費されると、後続のループはそれをスキップします。リストに変換すると、メンバーに引き続きアクセスできます。

from itertools import permutations as p 
combos = list(p(['/','*','-','+'], 3)) 
numbers = list(p(['9','7','7','6'])) 
for y in numbers: 
    print(y) 
    for x in combos: 
     print(x) 
+0

どうすればこの問題を回避できますか? – PAS

+0

@PASの 'combos = p(...)'は内側のループの内側にあります。 – quapka

+0

@quapka外部の反復ごとに順列を再計算する必要があるのはなぜですか? – kojiro

関連する問題