[英]Python Subtracting Elements in a Lists from Previous Element
我有一個循環,它產生多個這樣的列表:
[1,6,2,8,3,4]
[8,1,2,3,7,2]
[9,2,5,6,1,4]
對於每個列表,我想減去前兩個元素,然后使用該值減去后的第三個元素。
例如,第一個列表應最終看起來像:
[-5, 4,-6, 5,-1]
我嘗試手動執行此操作,但是要執行此操作的列表太多,這將花費太多時間。
我將如何在最少的代碼行中做到這一點?
從更新的示例中,似乎給定了列表[a, b, c, d, ...]
您想要的結果是[ab, bc, cd, de, ...]
。 為此,您應該將列表本身與列表zip
在一起,偏移一個位置,然后減去成對的元素。
lst = [1,6,2,8,3,4]
res = [x-y for x, y in zip(lst, lst[1:])]
print(res) # [-5, 4, -6, 5, -1]
如果列表更長,則可以創建一個迭代器,使用tee
復制該迭代器,然后將其中一個迭代器的位置向前移動一個next
:
import itertools
i1, i2 = itertools.tee(iter(lst))
next(i2)
res = [x-y for x, y in itertools.izip(i1, i2)] # or just zip in Python 3
>>> my_list = [1,6,2,8,3,4]
>>> [my_list[i] - my_list[i+1] for i in range(len(my_list) -1)]
[-5, 4, -6, 5, -1]
如果我對您的理解正確,那么您想優化代碼,以便使其運行更快。 減少代碼行並不能改善這一點,因為您正在遍歷列表。
據我所知,您的問題無法在n-1個減法下解決(其中n是輸入值的數量)。 但是,如果您知道如何創建列表,則可能會有更有效的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.