从列表中创建子列表,该子列表的子列表总和小于给定数量

时间:2016-12-01 18:26:08

标签: python list

我有2个输入:

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

我知道如何通过itertool.combinations获取基本列表子集但我想要的是每个子列表的连续子列表,其元素总和小于p

因此输出将是:

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

在这里,我有6个这样的子列表,每个子列表sum(sublist) < p

2 个答案:

答案 0 :(得分: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]]

答案 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中提到的,这是非常优越的。