Angenommen, ich hätte so etwas:
%Vor%und ich wollte jede Kombination von Dateien bekommen, ohne die bereits durchgeführten Kombinationen zu wiederholen (sobald cat_dog fertig ist, mach dog_cat nicht mehr). Kann ich das irgendwie machen? Meine wirkliche Liste ist in alphabetischer Reihenfolge, wenn das einen Unterschied macht.
In Wirklichkeit werden Sie nach allen Kombinationen von zwei Elementen in der Namensliste suchen (im Gegensatz zu all die mögliche Kombination aus ihnen) ).
Das bedeutet, dass Sie die integrierte itertools.combinations()
Generatorfunktion verwenden können Einfach (und effizient) generieren Sie Paare der gewünschten Namen ohne Wiederholungen:
Verarbeitete Paare:
%Vor%Wie wäre es mit iertoolscombinations ?
Anwendungsbeispiel:
%Vor% Das erste Argument ist eine iterierbare Zahl, die zweite ist r
, die Länge der zurückgegebenen Teilsequenzen.
Sie können die Ergebnisse dann mit Hilfe der Karte oder eines Verständnisses leicht verketten:
%Vor% x
im Lambda ist ein r
-großes Tupel.
Ergebnis des obigen wäre:
%Vor%Es gibt iertools , die Kombinationen und Permutationen durchführen können (Sie möchten die ersteren). Soweit ich das beurteilen kann, können Sie das Ausgabeformat nicht wirklich angeben, also erhalten Sie "catdog" als Ausgabe, aber die Doc-Seite gibt Ihnen eine Vorstellung davon, wie die Kombinationsfunktion funktioniert, so dass Sie sie anpassen können was du brauchst.
Eine Alternative für die Kombinationserstellung ohne Modulimport. Ähnlich wie bei @ Nates Antwort, aber marginal weniger komplex, erstellen Sie eine Kopie mit einzelnen Elementen und reduzieren sie im laufenden Betrieb (anstatt eine Liste von Paaren zu erstellen und die Suche nach Listen zu reduzieren):
%Vor%Tags und Links python list combinations