2015-07-01 44 views
0

所有組合我有這樣的代碼:使用itertools創建了一個價值

return [reduce(lambda x,y: str(x)+str(y), perm) 
     for perm in itertools.combinations(alphabet, n)] 

我的問題是,我希望它是最多到n的所有值。這是爲了做作業,而且我很難將其作爲單行Pythonic聲明。我怎麼會以這種方式繼續,所以我可以添加像聲明:

return [reduce(lambda x,y: str(x)+str(y), perm) 
     for perm in itertools.combinations(alphabet, n) for n in range(1,n+1)] 

除一人外,實際工作?

+0

排列或組合? Itertools提供這兩個,我相信 – Pynchia

+0

只是在這個組合上工作 – Rob

+1

發佈你的作業在stackoverflow?你的老師對嗎? – firelynx

回答

0

像這樣的東西?

>>> from itertools import combinations, chain 
>>> limit = 10 
>>> c = chain(*(combinations(alphabet, x) for x in range(1, limit+1))) 
>>> list(c) 

我不會顯示輸出,它太長了。

編輯:基於上面您的意見,好像你想在字符串的形式輸出,所以

[''.join(s) for s in chain(*(combinations(alphabet, x) for x in range(1, limit+1)))] 
+0

你絕對有幫助,我一直在努力格式化它,我不得不更多地研究鏈,但這會讓我朝着正確的方向前進。 – Rob

+0

@Rob我做了一個編輯,向您展示如何使用列表理解來使用'str.join'將'combinations'輸出的元組變成字符串。 – Sam

+0

'itertools.chain'只是將多個迭代連接在一起。 '(在範圍(1,limit + 1)中x的組合(字母,x))給你一組組合生成器:對於長度爲1的所有組合,一個可迭代,對於長度爲2的組合,等等。然後'鏈接'加入他們到一個長列表。 – Sam