删除数组中所需元素之间的不需要的元素

Posted

技术标签:

【中文标题】删除数组中所需元素之间的不需要的元素【英文标题】:Removing unwanted elements in between wanted elements in an array 【发布时间】:2017-09-25 22:20:11 【问题描述】:

我有一个可以简化为如下的数组:

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 的最长序列

【问题讨论】:

究竟要保留的数字的标准是什么? 标准将是最长的序列,没有中断(nan) “类似的东西”?如果您确切知道自己想要什么,请将该规范编辑到您的问题中。如果您不知道自己想要什么,那么您还没有准备好在 SO 上提问。 是的,我编辑了帖子。 【参考方案1】:

你可以试试

     a = a[9:-7]

在您当前的代码之后...

解释见Colon (:) in Python list index

【讨论】:

是的,但我想要一种无需实际查看数组即可确定起点和终点的方法。可能是和nans一起玩? 标准是什么?没有nan的最长序列? 如果您需要自动化解决方案,是的,但您需要更具体地回答您的问题……您如何选择元素?位置?与其他人的相对位置(即 Nan 元素)? 是的,标准就像彼得所说的没有nan的最长序列【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

在问题得到澄清后进行了大量编辑。

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

>>> 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]

【讨论】:

这是错误的。作为 IEEE 规范的一部分,NaN 与所有元素比较不相等。 'float('nan') == float('nan')` -> False 'float('nan') != float('nan') -> True @EfronLicht 我不认为nanNaN 相同。我应该在回答之前澄清一下。 我想只保留序列 '3, 4, 7, 8,9, 8, 7, 7' 而不是其他值 @RicardoFumachi 为什么不是其他值? @PeterWood 问题含糊不清。我也在做一个(有根据的)猜测。

以上是关于删除数组中所需元素之间的不需要的元素的主要内容,如果未能解决你的问题,请参考以下文章

.findOneAndUpdate() 删除数组中的所有元素

寻找数组中第K大的元素

每日一题之LeetCode移除元素 删除有序数组重复元素

数组相关函数

Spark数据框:从数组中删除元素

java ArrayList数组中如何插入一个元素