打印一个子列表,其中其元素的总和与原始列表的所有元素的总和相同

Prints a sub-list where the sum of its elements is the same as the sum of all the elements of the original list

我必须编写一个 Python 代码,当给定一个数字列表时,打印一个子列表,其中其元素的总和与原始列表的所有元素的总和相同。例如,考虑数字列表 [5, 6, 8, 6, 6, -12],代码应该打印子列表 [5,6,8],因为原始列表和子列表元素都有一个总和值等于 19;对于列表

到目前为止我已经完成了:

list_1 = [5, 6, 8, 6, 6, -12]
sub_list = []

for i in list_1:
    sub_list.append(i)
    if sum(sub_list) == sum(list_1):
        sub_list.remove(i)
    for i in list_1:
        if sum(sub_list) == sum(list_1):
            sub_list.remove(i)

print(sub_list)

如果 lst 是您的号码列表,那么:

def get_sublist(lst):
    tot = sum(lst)
    for i in range(len(lst)):
        for j in range(i + 1, len(lst) + 1):
            sub_lst = lst[i:j]
            if sum(sub_lst) == tot:
                return sub_lst

sub_lst = get_sublist(lst)

此代码生成每个可能的子列表,计算它们的总和并将其与整个列表的总和进行比较。

复杂度不是最优的,也就是说,有更快的算法可以解决这个问题。例如,您不需要每次向其中添加新元素时都计算整个子列表的总和...