2016-05-24 13 views
0

hier ist meine Linie:fraktionieren eine Kombination Generator mit Sellerie zu verteilen

generator = chain((product('ABCDE', repeat=k) for k in range(1,10))) 

und ich möchte es über mehrere Computer verteilen.

Ich werde Sellerie verwenden (aber ich bin offen auf andere Sachen).

aber im Moment habe ich keine Ahnung, wie man diese Linie teilt, um die Generation zu verteilen.

Wenn jemand eine Ahnung

dank

Antwort

1

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 
+0

cuold Sie mir diese Zeile bitte erklären: für k in Bereich (10) – user462794

+0

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. –

+0

und warum 20 in: Karte drucken (''. Join, islice (make_generator (letter), 20))? – user462794