2016-12-01 30 views
1

列表生成子列表我有2個輸入爲:從子表的總和小於給定數量

p = 7 
s = [2 2 8 1 3] 

我知道如何itertool.combinations得到基本列表的子集,但要我想要的是連續的子列表,每個子元素的總和小於p

所以結果應該是:

[2],[2,2],[2],[1],[1,3],[3] 

在這裏我得到了6個這樣的子列表,其中對於每個子列表,sum(sublist) < p

+0

它是否需要按照特定的順序? –

+0

爲什麼不是'[2,2,1]'和'[2,1,3]'列表中的一部分,因爲它們也小於7? –

+3

@MoinuddinQuadri「contiguous」,OP在問題 –

回答

4

試試這個:

p = 7 
s = [2,2,8,1,3] 
ans=[] 
for i in xrange(len(s)): 
    for j in xrange(i,len(s)): 
     if sum(s[i:j+1])<p: 
      ans.append(s[i:j+1]) 
print ans 

輸出:

[[2], [2, 2], [2], [1], [1, 3], [3]] 
+0

中提到它,你可以寫成一個列表理解:在xrange(len(s))中對於i中的i在xrange中爲ans = [s [i:j + 1] (i,len(s))如果sum(s [i:j + 1])

0

如果你喜歡一個套,你可以試試這個:

>>> sum([[s[i:j+1] for j in range(i, len(s)) if sum(s[i:j+1])<p] for i in range(len(s))], []) 
[[2], [2, 2], [2], [1], [1, 3], [3]] 

sum(list_of_lists, [])被壓扁列表創建的列表在列表理解中,如here所示。

或者你可以使用Julien Spronck在他的comment中提到的,這是遠遠優越的。

+0

我一直試圖想出一段時間的列表理解現在,而不是在這個晚上睡覺晚。現在是凌晨1:30。我的頭肯定不太好。 –

相關問題