Найти продукт всех элементов списка подсписка - PullRequest
0 голосов
/ 06 апреля 2020

У нас есть список, давайте возьмем его

lst = [1,2,3,4,5]

Я хочу получить результат как умножение всех элементов подсписка
, например:

result = [1,2,3,4,5,2,6,24,120,6,24,120,12,60,20]

За минимально возможное время

Объяснение приведенного выше результата: есть подмножества lst:

sublist = [[1],[2],[3],[4],[5],[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5],[2,3],[2,3,4],[2,3,4,5],[3,4],[3,4,5],[4,5]]

Я пробовал, но его время выполнения очень сильно

N=[1,2,3,4]
X=[]
for i in range(len(N)+1):
    for j in range(len(N)+1):
        c=N[i:j]
        X.append(c)

print(X)
X2 = [x for x in X if x != []]
print(X2)

S=[]
for i in X2:
    p=1 
    for j in i:
        p=p*j 
    S.append(p)

print(S)

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

Как минимум, как можно лучше умножение.

nums = [1, 2, 3, 4, 5]


def all_product(nums: list):
    products = []
    numbers = len(nums)
    for i in range(numbers):
        products.append(nums[i])
        for j in range(i + 1, numbers):
            products.append(products[-1] * nums[j])
    return list(products)


print(sorted(all_product(nums)))
# [1, 2, 2, 3, 4, 5, 6, 6, 12, 20, 24, 24, 60, 120, 120]

print(sorted([1, 2, 3, 4, 5, 2, 6, 24, 120, 6, 24, 120, 12, 60, 20]))
# [1, 2, 2, 3, 4, 5, 6, 6, 12, 20, 24, 24, 60, 120, 120]

1 голос
/ 06 апреля 2020

Используйте numpy.prod и itertools.combinations. Вот код, который вы хотите.

import itertools
import numpy as np
lst = [1,2,3,4,5]
result = []
for r in range(1, len(lst) + 1):
    for val in itertools.combinations(lst, r):
        result.append(np.prod(val))

результат будет [1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 6, 8, 10, 12, 15, 20, 24, 30, 40, 60, 24, 30, 40, 60, 120, 120].

0 голосов
/ 06 апреля 2020

Если вы используете range(len(N)) и используете N [i: j + 1], вы формируете все подмассивы без пустых массивов. В моем решении X не нужно, но я оставил его там. С этим кодом у вас меньше умножений, потому что вы повторно используете результаты предыдущих умножений подмассивов:

N=[1,2,3,4,5,6,7,8,9,10]
#X=[]
S=[]
for i in range(len(N)):
    p=1
    for j in range(i, len(N)):
        p=p*N[j]
        #X.append(N[i:j+1])
        S.append(p)

#print(X)
print(S)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...