我有一个循环,它产生多个这样的列表:
[1,6,2,8,3,4]
[8,1,2,3,7,2]
[9,2,5,6,1,4]
Run Code Online (Sandbox Code Playgroud)
对于每个列表,我想减去前两个元素,然后使用该值减去后的第三个元素。
例如,第一个列表应最终看起来像:
[-5, 4,-6, 5,-1]
Run Code Online (Sandbox Code Playgroud)
我尝试手动执行此操作,但是要执行此操作的列表太多,这将花费太多时间。
我将如何在最少的代码行中做到这一点?
从更新的例子,它似乎是,给定一个列表[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]
Run Code Online (Sandbox Code Playgroud)
如果列表更长,则可以创建一个迭代器,用于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
Run Code Online (Sandbox Code Playgroud)