2016-12-01 18 views
1

有n項產生一定程度上的所有多項式項

ts = ['t1','t2','t3',...,'tn'] 

的名單有實現這一條款的所有可能的Q-長度組合的任務。

因此,

ts = ['t1','t2'] 
q = 4 

答案是

[['t1','t1','t1','t1'],['t1','t2','t2','t2'],['t1','t1','t2','t2'], 
['t1','t1','t1','t2'],['t2','t2','t2','t2']] 

這裏是我的解決方案

powers = np.array(list(itertools.product(*[range(q+1)]*len(ts)))) 
powers = powers[np.where(np.asarray(map(sum, powers))==q)] 
res = map(lambda ps_: flatten([ p*[t] for p,t in zip(ps_,ts) ]), powers) 

其中flatten是從列表的列表產生列表功能。

雖然有解決方案,產生所需的結果,我想知道是否有更簡單的方法來解決這個問題?

+0

這些不是排列組合。他們可能與替換組合。 –

+0

謝謝,我錯過了,做了一個更正。 – tarashypka

回答

1

你需要的是與替換組合。最簡單的解決方案是使用恰當的名稱itertools.combinations_with_replacement

>>> list(itertools.combinations_with_replacement(ts,q)) 
[('t1', 't1', 't1', 't1'), 
('t1', 't1', 't1', 't2'), 
('t1', 't1', 't2', 't2'), 
('t1', 't2', 't2', 't2'), 
('t2', 't2', 't2', 't2')] 
+0

謝謝,那就是我一直在尋找的! – tarashypka

+0

@tarashypka不用擔心,直到你瞭解它是什麼,才能確定正確的名字:) –

相關問題