我有一个循环,可以生成多个列表,如:
[1,6,2,8,3,4]
[8,1,2,3,7,2]
[9,2,5,6,1,4]
对于每个列表,我想减去前两个元素,然后使用该值然后从中减去第三个元素。
例如,第一个列表应该看起来像:
[-5, 4,-6, 5,-1]
我曾尝试手动执行此操作,但有太多列表要执行此操作,这将花费太多时间。
如何以最少的代码行完成这项工作?
答案 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是输入值的数量)。但是,如果您知道如何创建列表,则可能会有更有效的解决方案。