2016-05-24 71 views
0

分發這裏是我的路線:分餾組合生成與芹菜

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

,我想它在幾個計算機分發。

我要去使用芹菜(但我打開其他東西)。

但目前我還不知道如何分配這一行來分配代。

如果任何人有任何線索

感謝

回答

1

這裏是產生5臺不同的發電機一個簡單的方法:

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)), '...' 

輸出:

['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'] ... 

同樣可以通過生產25修復前兩個字母等

請注意,我不使用chain,因爲它在傳遞單個迭代時不執行任何操作。你可能想chain.from_iterable,但我懷疑它,因爲它會產生單個字母。

make_generator或者可寫成:

for k in range(9): 
    for rest in product(letters, repeat=k): 
     yield (first_letter,) + rest 
+0

cuold你解釋我這一行,請:對於k的範圍(10) – user462794

+0

我假設你的意思是'對K的範圍內(9)'。我只是將生成器理解擴展到多行,並且有兩件事要迭代,所以它是一個嵌套循環。我已經編輯了這個問題,以顯示可以寫出的另一種方式,或許這會更清楚。 –

+0

以及爲什麼20:print map(''。join,islice(make_generator(letter),20))? – user462794