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] |
我想保留元素
标准:无NaN的最长序列
由于问题得到澄清,因此进行了实质性的编辑。
要获得最长的序列,可以使用
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] |
这是一个很好的列表理解的地方。
语法如下:
所以,假设你的标准是
1 2 | from math import isnan filtered_list = [x for x in my_list if isnan(x) or x >=3] |
注意,NaN的行为异常:对于任何变量
你可以试一下
1 | a = a[9:-7] |
在当前代码之后…
有关解释,请参见python列表索引中的冒号(:)。