erhält jede mögliche Kombination in einer Liste

7

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.

    
marsx 24.02.2011, 14:51
quelle

6 Antworten

5

Sie können es auch als Generator machen:

%Vor%

Nach der ersten Schleife ist der Inhalt von tuples :

%Vor%     
Nate 24.02.2011, 15:20
quelle
22

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:

%Vor%

Verarbeitete Paare:

%Vor%     
martineau 24.02.2011 14:59
quelle
4

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%     
Skurmedel 24.02.2011 14:58
quelle
3
%Vor%     
Hugh Bothwell 24.02.2011 15:49
quelle
2

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.

    
João Neves 24.02.2011 14:58
quelle
0

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%     
Dafydd Gibbon 30.01.2018 12:41
quelle

Tags und Links