2017-06-03 4 views
0
from itertools import permutations 
l = [0, 1, 2, 3, 4] 
x = permutations (l, 3) 

ich die folgende:Liste alle Permutationen von iterable

(0, 1, 2) , (0, 1, 3), ...., (0, 2, 1), (0, 2, 3), (0,2,4),...., (4, 3, 0), (4, 3, 1), 
(4, 3, 2) 

das ist, was erwartet wurde. Aber was ich brauche, ist:

(0, 0, 0), (0, 0, 1), ...., (0, 0, 4), (0, 1, 0), (0, 1, 1)........ 

Wie dies zu erreichen?

+0

Sie habe nicht erklärt, was das Ergebnis enthalten sollte. Aber überprüfen Sie die anderen Funktionen in iwertools, um zu sehen, ob eines Ihren Anforderungen entspricht. –

Antwort

2

Was Sie brauchen, ist eine Permutation mit Ersatz oder ein Produkt, sondern itertool ‚s permutations produziert Permutationen ohne Ersatz. Sie können das Produkt selbst berechnen:

[(x,y,z) for x in l for y in l for z in l] 
#[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4), (0, 1, 0), ... 

oder die gleichnamige Funktion von itertools verwenden:

list(itertools.product(l,repeat=3)) 
# [(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4), (0, 1, 0),... 

Der letztere Ansatz effizienter ist.

1

Sie müssen product verwenden, nicht permutations, aus itertools Modul wie in diesem Beispiel mit:

from itertools import product 

l = [0, 1, 2, 3, 4] 
# Or: 
# b = list(product(l, repeat=3)) 
b = list(product(l,l,l)) 
print(b) 

Ausgang:

[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), ..., (4, 4, 1), (4, 4, 2), (4, 4, 3), (4, 4, 4)] 
0

Sie Produkt benötigen und Permutation nicht

from itertools import product 
l = [0, 1, 2, 3, 4] 
b = list(product(l, repeat=3)) 
Verwandte Themen