Kombinationen von zwei Listen (nicht elementweise)

7

Ich habe zwei Listen:

%Vor%

Ich möchte die erzeugten Kombinationen zwischen den Elementen der Liste b und den Elementen der Liste a erhalten, aber die Elemente von a als Paare (oder Tripel usw.) als Beispiel verwenden:

Dies gibt len(b) ** len(a) Anzahl der Kombinationen.

%Vor%

Ich habe versucht, itertools.product zu verwenden (wie beschrieben hier ), aber das wird geben nur die 6 möglichen Kombinationen.

    
Giorgos Myrianthous 06.03.2017, 16:38
quelle

2 Antworten

14

Sie können itertools.product(..) verwenden, aber repeat als% co_de angeben %. So können Sie verwenden:

%Vor%

Das repeat=len(a) generiert Tupel wie:

%Vor%

Also ist hier das erste Element des Tupels dasjenige, das an product(..) angehängt ist, das zweite an a_ . Jetzt haben wir b_ sie zusammen mit der zip(..) Liste erstellt:

%Vor%

Jetzt ist es nur eine Frage der Formatierung ( a ), und '%s_%s'%t , die sie zusammen und ' '.join(..) ihnen einbezieht (oder Sie können das Listenverständnis verwenden, um eine Liste zu erstellen).

Das Ergebnis für Ihre Beispieleingabe ist:

%Vor%

Beachten Sie, dass die Elemente hier träge generiert werden. Dies kann nützlich sein, wenn Sie beispielsweise nur an den ersten yield -Einheiten interessiert sind oder wenn Sie nicht alle gleichzeitig erstellen möchten.

    
Willem Van Onsem 06.03.2017, 16:42
quelle
4

Sie könnten Ihre paarweisen Elemente explizit mit itertools.product erstellen und dann diese Paare erneut mit itertools.product

bearbeiten %Vor%

pairs enthält die zwei Listen, die wieder in itertools.product eingefügt werden können.

%Vor%

Das Ergebnis ist:

%Vor%     
Brad Campbell 06.03.2017 16:54
quelle

Tags und Links