2017-02-12 61 views
-5

鑑於Python的元組生成特定的輸出模式,從一個元組

products = (a, b, c, d, e, f, g) 

我試圖生成從「產品」一個新的元組/列表,而是根據具體模式:

  1. 所有可能的按時間順序排列的組合,例如ab,ac(&等等......)af,ag,bc等

  2. 與#1相似,但是設置了三個並確保增量更改爲「中間」產品的任一側相等ABC,BCD(&等等...)王牌,BDF,CEG

  3. 四個一組,再次確保增量變化等於兩側(之間)中間產物,如ABCD,BCDE(&等等...)交流勵磁發電機

從四處詢問和閱讀Python的現場,itertools.combinations()函數似乎朝着正確方向邁出的一步。但是,鑑於爲創造而尋求的特定模式,似乎不僅僅需要其標準使用形式中的功能。有什麼建議麼?

P.S. 平均值實際元組比上面的例子長數倍(我將總共有大約40個元組),並且每個元素中的某些「產品」將到期/退出,並且每隔幾周添加一個新元素,因此手動輸入組合進入新的元組不符合自動化的目標。

+0

請添加代碼,我們不能幫你,如果你不告訴你做了什麼。 – Jarvis

+1

我投票結束這個問題作爲題外話,因爲Stackoverflow不是一個代碼寫作服務。 – martineau

+0

Jarvis,我還沒有編寫任何代碼,至少不是針對這些模式。 – CB001

回答

2

這裏有一個明顯的懶辦法:

>>> products = 'abcdefg' 
>>> for length in range(2, 5): 
     for step in range(1, 42): 
      for start in range(42): 
       x = products[start : start+length*step : step] 
       if len(x) == length: 
        print x, 
     print 

ab bc cd de ef fg ac bd ce df eg ad be cf dg ae bf cg af bg ag 
abc bcd cde def efg ace bdf ceg adg 
abcd bcde cdef defg aceg 

如果你代替我42用正確計算停止值可以擺脫if len(x) == length:檢查。

+0

地球上哪裏有42條從哪裏來? –

+1

@ScottHunter「銀河系漫遊指南」響個不停? – schwobaseggl

+0

@schwobaseggl加上OP說了一些關於40號尺寸的東西,所以覺得正確。 –

0

這裏是一個一行,其中n是案件編號:

[ products[i:i+j*n+1:j] for j in xrange(1,len(products)/n+1) for i in xrange(len(products)-j*(n-1)) if i+j*n<len(products) ] 
+0

非常感謝Scott! – CB001