2015-12-24 3 views
1

Я пытаюсь суммировать несколько значений в моем массиве. Вот что у меня есть:Python Умножение и добавление значений в массив

x = ['a', 2, 5, 10],['b', 3, 4, 11], ['c', 4, 2, 12], ['d', 5, 1, 13] 

Я хочу, чтобы умножить 2-го и 3-го значения каждой строки, а затем добавить все продукты вместе:

(2*5) + (3*4) + (4*2) + (5*1) 

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

ответ

0
sum(map(lambda item: item[1]*item[2], x)) 

Работы для любого количества строк. Что мы делаем здесь:

  1. определить лямбда, чтобы умножить второй и третий элементы строки.
  2. Применить лямбда для каждой строки
  3. Сумма Результат

Поскольку мы делаем использование итератора здесь, требования к памяти является низким, даже для большого количества строк.

+0

Спасибо, это было очень полезно! –

0

Просто:

result = 0 

for arr in x: 
    result += arr[1] + arr[2] 

print (result) 

Но также вы можете использовать NumPy в будущем для работы с массивами.

0

Вы можете сделать это функционально:

x = ['a', 2, 5, 10],['b', 3, 4, 11], ['c', 4, 2, 12], ['d', 5, 1, 13] 
from operator import itemgetter, mul 
from itertools import starmap, imap 

print(sum(starmap(mul, imap(itemgetter(1, 2), x)))) 
35 

или сочетание функциональной и распаковка:

print(sum(a * b for a, b in imap(itemgetter(1, 2), x))) 
35 

Просто распаковке:

print(sum(a * b for _, a, b, _ in x)) 

Или индексацию:

print(sum(sub[1] * sub[2] for sub in x)) 

Если скорость ваша основная забота и возможность распаковки возможна, то sum(a * b for _, a, b, _ in x) должен быть самым быстрым, за которым следует sum(sub[1] * sub[2] for sub in x) , и с помощью списка на самом деле будет быстрее, но, очевидно, используйте больше памяти.

+0

Распаковка Решение становится уродливым, если в каждой строке больше элементов. Выглядит нормально для 4 элементов. – helloV

+0

@helloV, если их было несколько, вы бы не использовали его, я предоставил три других метода, включая, вероятно, самые быстрые способы сделать это, используя лямбду дорого –

Смежные вопросы