Python 制作列表子集和的列表

Python 制作列表子集和的列表,python,arrays,list,Python,Arrays,List,我们有一个列表,上面写着list1=[2,1,4] 我用下面的代码制作了一个名为subl的二维列表,它是list1的子集 def子目录(列表1): 子列表=[]] 对于范围(0,len(列表1)-1)中的i: 对于范围(i+1,len(列表1)+1)内的j: sub=list1[i:j] sublist.append(sub) 返回子列表 我得到的结果是 subl=sub_列表(列表1)\[[],[2],[2,1],[2,1,4],[1],[1,4]] 现在我想创建一个数组,其中包含subl

我们有一个列表,上面写着
list1=[2,1,4]

我用下面的代码制作了一个名为subl的二维列表,它是list1的子集

def子目录(列表1):
子列表=[]]
对于范围(0,len(列表1)-1)中的i:
对于范围(i+1,len(列表1)+1)内的j:
sub=list1[i:j]
sublist.append(sub)
返回子列表
我得到的结果是

subl=sub_列表(列表1)\[[],[2],[2,1],[2,1,4],[1],[1,4]]
现在我想创建一个数组,其中包含subl中列表元素的和 我写了以下代码,但它不能正常工作

sum=[];
对于范围(0,len(subl)-1中的i:
l=len(subl[i])
t=0
对于范围(0,l-1)内的j:
t=t+subl[i][j]
追加总和(t)
打印(总和)
我得到的结果是

[0, 0, 2, 3, 0]
而期望的输出应该是

[0,2,3,7,1,5]

我想第二个for循环有点不对劲。请帮忙

之所以不起作用,是因为您正在向上循环到
i=len(subl)-2
j=l-2
,这使得最后一个元素不被计数,因此您可以将范围(0,len(subl))中的i的两个循环更改为
和范围(0,l)中的j的
。另外,建议不要使用
sum
作为变量名,因为它是python中的内置函数,可能会产生错误。因此,更正后的代码为:

list1 = [2, 1, 4]
def sub_lists(list1):
    sublist = [[]]
    for i in range(0, len(list1) - 1):
        for j in range(i + 1, len(list1) + 1):
            sub = list1[i:j]
            sublist.append(sub)
    return sublist

subl=sub_lists(list1)
s=[];
for i in range(0, len(subl)):
    l=len(subl[i])
    t=0;
    for j in range(0, l):
        t=t+subl[i][j]
    s.append(t)
print(s)

建议您使用
map
sum

list1 = [2, 1, 4]
def sub_lists(list1):
    sublist = [[]]
    for i in range(0, len(list1) - 1):
        for j in range(i + 1, len(list1) + 1):
            sub = list1[i:j]
            sublist.append(sub)
    return sublist

subl=sub_lists(list1)
s=list(map(sum, subl))
#same as [sum(l) for l in subl]
print(s)
或者,如果您的主要目的是子列表的总和,则只需添加@deadshot所述的总和:

list1 = [2, 1, 4]
def sum_of_sublists(list1):
    sublist = [0]
    for i in range(0, len(list1) - 1):
        for j in range(i + 1, len(list1) + 1):
            sub = list1[i:j]
            sublist.append(sum(sub))
    return sublist

print(sum_of_sublists(list1))
所有产出:

[0,2,3,7,1,5]

您的代码不起作用,因为您的范围不正确,请分别使用
范围(0,len(subl))
范围(0,l)

导入numpy作为np
列表1=[2,1,4]
subl=子列表(列表1)
您可以使用列表理解来查找子列表的总和:

ans=[int(np.sum(l))表示subl中的l]
输出:

ans # prints [0, 2, 3, 7, 1, 5]

这些并不是真正的子集,更像是范围(0,l-1)中j的连续值的子集,从
范围(0,l)中j的子集:
为什么追加列表只需添加
子列表。追加(sum(sub))
您也可以尝试,
[sum(x)for x in subl]