Ich möchte effizient finden Permutationen eines Vektors, der Werte gebunden hat.Python Itertools Permutationen mit gebundenen Werte
Z. B. wenn Ich würde alle Kombinationen von [0,0,1,2], [0,0,2,1], [0,1,2,0]
als Ausgabe erhalten mag, und so weiter, aber ich will nicht [0,0,1,2]
zweimal erhalten, das ist es, was die Standard-itertools.permutations(perm_vector)
geben würde.
habe ich versucht, die folgenden aber es funktioniert wirklich langsam, wenn perm_vector grows
in len:
vectors_list = []
for it in itertools.permutations(perm_vector):
vectors_list.append(list(it))
df_vectors_list = pd.DataFrame(vectors_list)
df_gb = df_vectors_list.groupby(list(df_vectors_list.columns))
vectors_list = pd.DataFrame(df_gb.groups.keys()).T
Die Frage der allgemeineren "Speed-up" Natur ist, eigentlich. Die Hauptzeit wird verwendet, um die Permutationen von langen Vektoren zu erzeugen - auch ohne die Duplizität nimmt die Erzeugung von Permutationen eines Vektors von 12 einzigartigen Werten eine "Unendlichkeit" an. Gibt es eine Möglichkeit, die itertools iterativ aufzurufen, ohne auf die gesamten Permutationsdaten zuzugreifen, sondern daran zu arbeiten?
Mögliche Duplikat [Warum itertools.permutations Duplikate enthält Python? (Wenn die ursprüngliche Liste Duplikate)] (http://stackoverflow.com/questions/6534430/why-does-pythons-itertools-permutations-contain-duplicates-when-the-original) –
Hier ist eine externe [link] (http://blog.bjrn.se/2008/04/lexicographic-permutations-using.html) von einem Kommentar in dem Thread, auf den der obige Kommentar verweist, der hilfreich sein könnte. – Praveen
gibt es ein Rezept für das im itertools Modul, überprüfen Sie die unique_everseen Rezept: https://docs.python.org/3/library/itertools.html#itertools-recipes – Copperfield