所以正如我在標題中所說,我想將串列中的每兩個鄰居相乘并將它們全部相加 - 使用單個代碼行。
我正在尋找最優雅和最有效的方法,而不使用額外的記憶體等。
這是我現在所擁有的:
import numpy as np
G = lambda array: sum(np.multiply(array[:-1], array[1:])))
那行得通,但是當我寫array[:-1]and時array[1:],它不會創建兩個新陣列嗎?如果是這樣,有沒有辦法用相同的原始陣列來做到這一點?
或者也許你可以想出一個更好的方法來做到這一點:)
uj5u.com熱心網友回復:
實際的numpy方式
array = np.array([1, 2, 3, 4])
array[1:] @ array[:-1]
Out[]: 20
@是點積運算子,通常稱為乘和運算。
如果您已婚lambda,那將是:
G = lambda array: array[1:] @ array[:-1]
uj5u.com熱心網友回復:
嘗試以下操作:
lst = [1,2,3,4]
func = lambda lst: sum([lst[i]*lst[i 1] for i in range(len(lst)-1)])
func(lst)
uj5u.com熱心網友回復:
如果您不受 lambda 約束,您可以:
def sum_with_neighbours(arr: list[int]) -> int:
sum_ = 0
for i in range(len(arr) - 1): # -1 because we want to go until second-last item
sum_ = arr[i] * arr[i 1]
return sum_
uj5u.com熱心網友回復:
itertools.pairwise可能是最pythonic的選擇:
>>> from itertools import pairwise
>>> [*pairwise(range(5))]
[(0, 1), (1, 2), (2, 3), (3, 4)]
>>> sum(i * j for i, j in pairwise(range(5)))
20
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/468198.html
