Kann diese einfache Rekursion mit Python - Python, Rekursion nicht herausfinden

Vielleicht ist es nicht so einfach, aber ich versuche im Grunde alle Permutationen einer Liste von Briefen zu finden.

[[a,b],[c,d],[e,f]] Der Einfachheit halber kann es länger sein als nur 3 Listen von 2 (dh 6 Listen von 3 Buchstaben usw.).

Ich möchte, dass mein Programm alle 8 Kombinationen für das obige Beispiel findet, während die Reihenfolge der Hauptliste beibehalten wird (ist das Permutation?).

As
akf
ade
adf
bce
BCF
BDE
bdf

Derzeit denke ich, dass die folgende Lösung iterieren wirdrekursiv durch die Kombinationen, die ich will; Ich kann jedoch nicht herausfinden, wie sie in der richtigen Reihenfolge gespeichert werden, denn wenn die Basisbedingung für die erste Zeile erreicht ist, wird einfach zum nächsten Buchstaben im letzten Index der Liste gesprungen.

Ich glaube nicht, dass ich etwas finden konnte, das für mich funktionieren würde itertools

def find_comb(mylist):

for curr_index in range(0,len(mylist)):

for letter in mylist[curr_index]:

if (curr_index+1<=len(mylist)):
next_letter=find_comb(mylist[curr_index+1:])

return 1     #wrote 1 for now because I am stumped

Antworten:

1 für die Antwort № 1

Ich denke was du willst ist itertools.product

from itertools import product

x = [["a","b"], ["c","d"], ["e","f"]]

for _ in product(*x):
print _

Drucke

("a", "c", "e")
("a", "c", "f")
("a", "d", "e")
("a", "d", "f")
("b", "c", "e")
("b", "c", "f")
("b", "d", "e")
("b", "d", "f")

In Bezug auf deinen Kommentar:

product nimmt eine Reihe von Iterablen und erzeugt ihr Produkt, in Ihrem Fall senden Sie es jedoch ein einziges iterable (das aus mehr iterables bestand). Also anstatt hineinzugehen l1, l2, l3 du gingst vorbei[l1, l2, l3].

Um die drei Iterables tatsächlich zu übergeben, müssen wir die Liste mit dem Sternchen entpacken, wodurch diese einzelne Liste in drei Argumente umgewandelt wird. Für mehr darüber, siehe Was macht ** (Doppelstern) und * (Stern) für Parameter?


Speisekarte