Python 当我计算列表中连续元素之间的差异时,如何保持列表中的第一个元素不变?
我有一份清单:Python 当我计算列表中连续元素之间的差异时,如何保持列表中的第一个元素不变?,python,python-3.x,list,Python,Python 3.x,List,我有一份清单: a = [0, 4, 10, 100] 我想计算列表中连续元素之间的差异。我这样做: [x - a[i-1] for i, x in enumerate(a)] 但它给我带来了这样的结果: [-100, 4, 6, 90] 正如您所看到的,第一个元素是-100,但我想保持第一个元素不变,当我进行这样的转换以得到这个[0,4,6,90]时。如何做到这一点?与: 正如帖木儿提到的,列表理解将提供最简洁的解决方案 使用zip,我们不需要条件(但我们丢失了第一个元素): 使用zip
a = [0, 4, 10, 100]
我想计算列表中连续元素之间的差异。我这样做:
[x - a[i-1] for i, x in enumerate(a)]
但它给我带来了这样的结果:
[-100, 4, 6, 90]
正如您所看到的,第一个元素是-100,但我想保持第一个元素不变,当我进行这样的转换以得到这个[0,4,6,90]
时。如何做到这一点?与:
正如帖木儿提到的,列表理解将提供最简洁的解决方案 使用zip,我们不需要条件(但我们丢失了第一个元素):
使用
zip
的一个变体是只添加一个前导0,因为项-0
将是0
x = [0, 4, 10, 100]
assert [b - a for a, b in zip([0] + x, x)] == [0, 4, 6, 90]
如果您正在处理大量列表,在循环中运行它,并且关心性能,那么您可能不希望将所有
a
附加到新列表的开销,并且可以使用另一个解决方案或itertools.chain([0],a)
如果您不介意导入numpy,这将非常快速地处理长列表:
import numpy as np
a = [0, 4, 10, 100]
np.diff(a, prepend=0).tolist()
只要
结果[0]+=a[-1]
有问题吗?您对第一项使用完全不同的规则。因此,您可以将输出定义为[first\u item]
+从一个项目到下一个项目的差异列表,其中有许多解决方案,例如,您的系列中只有三个差异。为什么要在结果中包含四个元素?这并不是说“保持第一个元素不变”——差异过程不会改变任何元素;它返回一个新的值序列。
x = [0, 4, 10, 100]
assert [b - a for a, b in zip([0] + x, x)] == [0, 4, 6, 90]
import numpy as np
a = [0, 4, 10, 100]
np.diff(a, prepend=0).tolist()