Составление списка сумм подмножеств списка - PullRequest
1 голос
/ 10 июля 2020

У нас есть список, скажем, list1 = [2, 1, 4]

Я сделал 2-й список подмножеств list1 с именем subl с помощью следующего кода.

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) #[[], [2], [2, 1], [2, 1, 4], [1], [1, 4]]

Теперь я хочу создать массив сумм элементов списка, представленных в subl. Я написал следующий код, но он работает некорректно.

sum = [];
for i in range(0, len(subl) - 1):
  l = len(subl[i])
  t = 0
  for j in range(0, l - 1):
    t = t + subl[i][j]
  sum.append(t)
print(sum)

Результат, который я получаю

[0, 0, 2, 3, 0]

Хотя желаемый результат должен быть

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

Думаю, что-то не так во втором для l oop. Пожалуйста, помогите!

Ответы [ 3 ]

1 голос
/ 10 июля 2020

Ваш код не работает, потому что ваши диапазоны неверны, используйте соответственно range(0, len(subl)) и range(0, l)

1 голос
/ 10 июля 2020
import numpy as np
list1 = [2, 1, 4]
subl = sub_lists(list1)

Вы можете просто использовать понимание списка, чтобы найти сумму подсписок:

ans = [int(np.sum(l)) for l in subl]

Вывод:

ans # prints [0, 2, 3, 7, 1, 5]
1 голос
/ 10 июля 2020

Причина не работает, потому что вы выполняете цикл до i=len(subl)-2 и j=l-2, из-за чего последний элемент не учитывается, поэтому вы можете изменить оба цикла на for i in range(0, len(subl)): и for j in range(0, l):. Кроме того, в качестве предложения не используйте 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...