gpt4 book ai didi

python - 如何保留列表中的第 n 个项目并使其余项目为零

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:02 25 4
gpt4 key购买 nike

我正在尝试对长时间序列中的嘈杂数据进行建模和拟合,我想看看如果删除大量数据,我的拟合会发生什么。

我有一个很长的时间序列数据,我只对第 n 个项目感兴趣。然而,我仍然想随着时间的推移绘制这个列表,但删除所有其他不需要的元素。

例如,对于n=4,列表

a = [1,2,3,4,5,6,7,8,9,10...]

应该变成

a_new = [1,0,0,0,5,0,0,0,9,0...]

我不介意第 n 个项目的位置是在序列的开始还是结束,我的序列实际上是任意的,而且很长以至于我删除什么都无关紧要。例如 'a_new' 也可以是:

a_new = [0,0,0,4,0,0,0,8,0,0...]

理想情况下,解决方案不依赖于列表的长度,但我可以将该长度作为变量。

编辑 1:

我实际上想要空元素,而不是零,(如果可能的话?)所以:

a_new = [1,,,,5,,,,9...] 

编辑 2:

我也需要从我的时间序列中删除相应的元素,以便在绘制所有内容时,每个数据元素都具有与时间序列元素相同的索引。

谢谢!

最佳答案

使用列表理解ternary conditional它采用数字 n 上每个元素的 mod:

>>> a = [1,2,3,4,5,6,7,8,9,10]
>>> n = 4
>>> [i if i % n == 0 else 0 for i in a]
[0, 0, 0, 4, 0, 0, 0, 8, 0, 0]

如果数据不是递增的(这很可能是这样),请使用 enumerate,这样 mod 就会在索引上而不是在元素上:

>>> [v if i % n == 0 else 0 for i, v in enumerate(a)]
[1, 0, 0, 0, 5, 0, 0, 0, 9, 0]

使用 enumerate 时也可以轻松更改起点:

>>> [v if i % n == 0 else 0 for i, v in enumerate(a, 1)] # start indexing from 1
[0, 0, 0, 4, 0, 0, 0, 8, 0, 0]

如果您打算删除您不需要的数据而不是替换它们,那么过滤器使用if(而不是三元运算符)列表理解可以处理这个:

>>> [v for i, v in enumerate(a, 1) if i % n == 0]
[4, 8]

关于python - 如何保留列表中的第 n 个项目并使其余项目为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39467082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com