Я хочу последовательно умножать смежный элемент списка и добавить умножение:Multiply соседние элементы списка и добавить их
([1,2,3,4])
должен выполнять(1*2+2*3+3*4)
и[1,2,3]
Я хочу, чтобы получить8
потому что(1*2)+(2*3)
Я хочу последовательно умножать смежный элемент списка и добавить умножение:Multiply соседние элементы списка и добавить их
([1,2,3,4])
должен выполнять (1*2+2*3+3*4)
и[1,2,3]
Я хочу, чтобы получить 8
потому что (1*2)+(2*3)
Функция с помощью sum
, map
, lambda
и zip
def my_math(lst):
return sum(map(lambda x: x[0]*x[1], zip(lst, lst[1:])))
>>> my_math([1,2,3])
8
>>> my_math([1,2,3,4])
20
>>> my_math([1,2,3,4,5])
40
Это то, что я подумал и о «многократных элементах», но посмотрите на примеры, которые дает OP в теле вопроса. – delnan
@InbarRose Почему карта (* zip) не работает? – ersran9
@ ersran9 Вы имеете в виду 'map (mul, ...)' one? 'mul' принимает два аргумента и, к сожалению, не поддерживает передачу одного итерабельного. – poke
Использование списка понимание:
>>> mylist = [1,2,3,4]
>>> sum(mylist[i] * mylist[i + 1] for i in range(len(mylist) - 1))
20
Попробуйте это:
x=[1,2,3,4]
print sum(a*b for a,b in zip(x, x[1:]))
#prints 20
+1. Вы можете сбросить '[: -1]', 'print sum (a * b для a, b в zip (x, x [1:]))' производит тот же результат – iruvar
Обновлено. Благодарю. –
Использование pairwise
itertools recipe:
>>> sum(a * b for (a, b) in pairwise([1, 2, 3, 4]))
20
>>> sum(a * b for (a, b) in pairwise([1, 2, 3]))
8
Что мне нужно чан ge если хотите
function([1,2,3,4])
выступить(1*2*3*4)
?
>>> from functools import reduce
>>> from operator import mul
>>> reduce(mul, [1, 2, 3, 4])
24
Что мне нужно для выполнения функции ifhen ([1,2,3,4]) выполнить (1 * 2 * 3 * 4)? – user2469891
@ user2469891 См. Мое редактирование. – poke
In [88]: mylist = [1,2,3,4]
In [89]: sum(itertools.imap(lambda t: operator.mul(*t), itertools.izip(mylist, itertools.islice(mylist, 1, len(mylist)))))
Out[89]: 20
Выражение генератор без каких-либо списков срезов/копий
>>> mylist = [1,2,3,4]
>>> sum(mylist[i-1] * j for i, j in enumerate(mylist) if i)
20
Что-то не ясно, о чем вы спрашиваете, либо ваши примеры неправильно - или вы не * умножения * , 1 раз 2 раза 3 - 6, а не 8. –
По существу то же самое, что и http://stackoverflow.com/q/14916957/1907098, за исключением того, что вы «суммируете» результирующий список. – Volatility
Похоже, вам нужно «свернуть» или «zip» ... – Shark