Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当我计算列表中连续元素之间的差异时,如何保持列表中的第一个元素不变?_Python_Python 3.x_List - Fatal编程技术网

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()