簡體   English   中英

從先前元素的列表中減去Python元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM