2015-03-02 4 views
-1

Что такое лучший способ найти продукт любого количества элементов из списка?Найти продукт любого подмножества элементов из списка

например, если у меня есть [a,b,c] как вход, я должен получить [a,b,c,a*b,a*c,b*c,a*b*c] как выход (порядок элементов для вывода не имеет значения.)

PS: Мы можем сделать это рекурсивно? (Например, вам просто нужно продукт a*b и c, чтобы получить продукт a*b*c

Любая идея или предложение приветствуется Спасибо заранее

ответ

2

Здесь вы идете:..!

from itertools import combinations 

l = [2, 3, 5] 

result = [] 
for i in range(1, len(l) + 1): 
    result += list(combinations(l, i)) 

multiplied_result = [reduce(lambda x, y: x*y, lst) for lst in result] 

Теперь, если мы выводим результат, мы получаем

>>> print listmap 
[2, 3, 5, 6, 10, 15, 30] 
+0

Привет спасибо за ваш ответ, этот метод самый быстрый способ, что вы знаете, до сих пор? –

+0

@freak_warrior Да. Ответ Касры делает то же самое в одном понимании списка. –

+0

Хорошо, я имею в виду алгоритм, который может сделать то же самое в меньшей сложности, как и в этом случае ... http://stackoverflow.com/questions/2680548/given-an-array-of-numbers-return-array -of-products-of-all-other-numbers-no-div –

1

Вы можете использовать itertools.combinations в списке compreh ension:

>>> def find_mul(li): 
...  return [[reduce(lambda x,y:x*y,j) for j in combinations(li,i)] for i in xrange(2,len(li)+1)] 
... 

DEMO:

>>> [list(combinations([2,3,4],i)) for i in xrange(2,len([2,3,4])+1)] 
[[(2, 3), (2, 4), (3, 4)], [(2, 3, 4)]] 
>>> l=[2,3,4] 
>>> find_mul(l) 
[[6, 8, 12], [24]] 
Смежные вопросы