Python从前一个元素的列表中减去元素

时间:2016-08-22 20:52:23

标签: python list loops

我有一个循环,可以生成多个列表,如:

  [1,6,2,8,3,4]

  [8,1,2,3,7,2]

  [9,2,5,6,1,4]

对于每个列表,我想减去前两个元素,然后使用该值然后从中减去第三个元素。

例如,第一个列表应该看起来像:

  [-5, 4,-6, 5,-1]

我曾尝试手动执行此操作,但有太多列表要执行此操作,这将花费太多时间。

如何以最少的代码行完成这项工作?

3 个答案:

答案 0 :(得分:4)

从您更新的示例中,似乎是一个列表[a, b, c, d, ...],您希望[a-b, b-c, c-d, d-e, ...]作为结果。为此,您应该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

答案 1 :(得分:1)

>>> 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]

答案 2 :(得分:-1)

如果我理解正确,您希望优化代码,因此运行速度更快。减少代码行不会改善这一点,因为你循环遍历列表。

据我所知,你的问题不能在n-1减法中解决(其中n是输入值的数量)。但是,如果您知道如何创建列表,则可能会有更有效的解决方案。