Python 从子列表之和小于给定数字的列表生成子列表

Python 从子列表之和小于给定数字的列表生成子列表,python,list,Python,List,我有两个输入: p = 7 s = [2 2 8 1 3] 我知道如何通过itertool.compositions获得基本列表子集,但我想要的是相邻的子列表,每个子列表的元素总和小于p 因此,输出将是: [2],[2,2],[2],[1],[1,3],[3] 这里我得到了6个这样的子列表,其中对于每个子列表,sum(sublist)>sum([s[i:j+1]表示范围内的j(i,len(s))如果sum(s[i:j+1])如果您喜欢单行程序,可以尝试以下方法: >>>

我有两个输入:

p = 7
s = [2 2 8 1 3]
我知道如何通过
itertool.compositions
获得基本列表子集,但我想要的是相邻的子列表,每个子列表的元素总和小于
p

因此,输出将是:

 [2],[2,2],[2],[1],[1,3],[3]  
这里我得到了6个这样的子列表,其中对于每个子列表,
sum(sublist)
尝试以下方法:

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
试试这个:

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

如果您喜欢单行程序,可以尝试以下方法:

>>> 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([s[i:j+1]表示范围内的j(i,len(s))如果sum(s[i:j+1])如果您喜欢单行程序,可以尝试以下方法:

>>> 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([s[i:j+1]表示范围内的j(i,len(s)),如果sum(s[i:j+1]),它是否需要按特定顺序?为什么不
[2,2,1]
[2,1,3]
作为列表的一部分,因为它们也小于7?@moinuddinkadri“连续”,OP在问题中提到它是否需要按特定顺序?为什么不
[2,2,1]
[2,1,3]
由于它们也小于7,所以它们是你列表的一部分?@moinuddinkadri“连续的”,OP在你可以写为列表理解的问题中提到了这一点:
ans=[s[i:j+1]对于x范围内的i(len(s))对于x范围内的j(i,len(s)),如果和(s[i:j+1])
可以写为列表理解:
ans=[s[i:j+1]表示x范围内的i(len(s))表示x范围内的j(i,len(s)),如果和(s[i:j+1])
我一直在努力想出一个列表理解,而不是这么晚才睡觉。现在是凌晨1:30。我的脑袋肯定不是很好。我一直在努力想出一个列表理解,而不是这么晚才睡觉。现在是凌晨1:30。我的头肯定不是很好。