Hier ist eine einfache Art und Weise 5 verschiedene Generatoren zu produzieren:
from itertools import product, islice
letters = 'ABCDE'
def make_generator(first_letter):
return ((first_letter,) + rest
for k in range(9)
for rest in product(letters, repeat=k))
for letter in letters:
print map(''.join, islice(make_generator(letter), 20)), '...'
Ausgang:
['A', 'AA', 'AB', 'AC', 'AD', 'AE', 'AAA', 'AAB', 'AAC', 'AAD', 'AAE', 'ABA', 'ABB', 'ABC', 'ABD', 'ABE', 'ACA', 'ACB', 'ACC', 'ACD'] ...
['B', 'BA', 'BB', 'BC', 'BD', 'BE', 'BAA', 'BAB', 'BAC', 'BAD', 'BAE', 'BBA', 'BBB', 'BBC', 'BBD', 'BBE', 'BCA', 'BCB', 'BCC', 'BCD'] ...
['C', 'CA', 'CB', 'CC', 'CD', 'CE', 'CAA', 'CAB', 'CAC', 'CAD', 'CAE', 'CBA', 'CBB', 'CBC', 'CBD', 'CBE', 'CCA', 'CCB', 'CCC', 'CCD'] ...
['D', 'DA', 'DB', 'DC', 'DD', 'DE', 'DAA', 'DAB', 'DAC', 'DAD', 'DAE', 'DBA', 'DBB', 'DBC', 'DBD', 'DBE', 'DCA', 'DCB', 'DCC', 'DCD'] ...
['E', 'EA', 'EB', 'EC', 'ED', 'EE', 'EAA', 'EAB', 'EAC', 'EAD', 'EAE', 'EBA', 'EBB', 'EBC', 'EBD', 'EBE', 'ECA', 'ECB', 'ECC', 'ECD'] ...
Ebenso können Sie 25 produzieren, durch Befestigung der ersten beiden Buchstaben usw.
Beachten Sie, dass ich chain
nicht verwende, da es nichts tut, wenn es ein einzelnes iterable passiert. Vielleicht möchten Sie chain.from_iterable
, aber ich bezweifle es, weil das einzelne Buchstaben ergeben wird.
make_generator
kann alternativ geschrieben werden:
for k in range(9):
for rest in product(letters, repeat=k):
yield (first_letter,) + rest
cuold Sie mir diese Zeile bitte erklären: für k in Bereich (10) – user462794
Ich nehme an, Sie bedeuten 'für k in Bereich (9)'. Ich habe das Verständnis des Generators einfach auf mehrere Zeilen verteilt, und es gibt zwei Dinge, über die man iterieren kann, also ist es eine verschachtelte Schleife. Ich habe die Frage bearbeitet, um eine andere Möglichkeit zu zeigen, wie das geschrieben werden kann, vielleicht wird das klarer. –
und warum 20 in: Karte drucken (''. Join, islice (make_generator (letter), 20))? – user462794