关于python:删除数组中所需元素之间不需要的元素

Removing unwanted elements in between wanted elements in an array

我有一个数组,可以简化为如下所示:

1
a=[nan, 2, 1, 1, nan, nan, 3, nan, nan, 3, 4, 7, 8, 9, 8, 7, 7, nan, nan, nan, 3, 2, nan, 2]

我想保留元素3, 4, 7, 8, 9, 8, 7, 7nan元素不打扰我,因为它们不显示在图形中,但我想过滤其余值。

标准:无NaN的最长序列


由于问题得到澄清,因此进行了实质性的编辑。

要获得最长的序列,可以使用groupbymax

1
2
3
4
5
6
7
8
9
10
>>> from itertools import groupby
>>> from math import isnan

>>> nan = float('NaN')

>>> a = [nan, 2, 1, 1, nan, nan, 3, nan, nan, 3, 4, 7, 8,
...      9, 8, 7, 7, nan, nan, nan, 3, 2, nan, 2]

>>> max((list(group) for key, group in groupby(a, key=isnan)), key=len)
[3, 4, 7, 8, 9, 8, 7, 7]


这是一个很好的列表理解的地方。

语法如下:[x for x in my_list if condition()]

所以,假设你的标准是x is nan or x>=3

1
2
from math import isnan
filtered_list = [x for x in my_list if isnan(x) or x >=3]

注意,NaN的行为异常:对于任何变量v(nan==v)==False .math.isnan代替。


你可以试一下

1
     a = a[9:-7]

在当前代码之后…

有关解释,请参见python列表索引中的冒号(:)。