2013-07-22 4 views
0

Как я могу умножить каждый элемент одного списка на каждый элемент другого списка в Python и затем суммировать результат вариаций результатов умножения?Умножить элементы списка в python

list_1 = [0, 1, 2, 3, 4, 5] 

list_2 = [11, 23, m] 

Где м элемент в list_2 может быть любое число в то время как длина элементов в списке вводится с входом. Таким образом, в основном этот список содержит минимум 2 элемента и может достигать 12 в зависимости от требований пользователя.

То, что я ищу это функция/алгоритм, который позволит следующий список результатов .:

0 * 11 + 0 * 23 + .. + 0 * м

1 * 11 + 0 * 23 + .. + 0 * м

2 * 11 + 0 * 23 + .. + 0 * м

..

3 * 11 + 2 * 23 + .. + 5 * m

..

5 * 11 + 5 * 23 + .. + 5 * м

+0

Это то, что вы искали? http://stackoverflow.com/questions/10271484/python-dot-multiply-two-lists [а * Ь для а, б, в молнии (Lista, LISTB)] – samsquanch

ответ

2

itertools.product может помочь вам генерировать все способы для выбора элементов list1 для умножения на элементы list2.

sums = [] 
for list1_choices in itertools.product(list1, repeat=len(list2)): 
    sums.append(sum(x*y for x, y in zip(list1_choices, list2)) 

Или, как список понимания:

[sum(x*y for x, y in zip(list1_choices, list2)) 
for list1_choices in itertools.product(list1, repeat=len(list2))] 
+0

Это действительно решение вопроса, который был (довольно запутанно) поставлен - OP требует sumproduct по всем возможным выборам из 'list_1' той же длины, что и' list_2', с заменой. – richsilv

4
[sum(x * y for x in list_2) for y in list_1] 
+1

Это лучше без внутренних скобках: ' '[sum (x * y для x в list_2) для y в list_1]' ': sum работает над генераторами. – hivert

+0

отметил, спасибо hivert. – richsilv

+1

Это не то, о чем попросил ОП. Еще раз взгляните на его желаемый результат; он описывал свои требования странно. – user2357112

0

Вы можете использовать цикл:

for x in list_1: 
    print sum(x * y for y in list_2) 
Смежные вопросы