首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除列表中的项目,如果超出IQR

删除列表中的项目,如果超出IQR
EN

Stack Overflow用户
提问于 2014-12-11 21:23:51
回答 3查看 829关注 0票数 3

我试图从列表中删除一个项目,如果它超出了中间值的四分位数范围。

以下是清单:

代码语言:javascript
复制
l = [69, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 87, 89]

import numpy as np一起使用的是IQR、中间值和中值以上及以下。

代码语言:javascript
复制
iqr = np.subtract(*np.percentile(l, [75, 25]))
median = np.percentile(l, 50)
minus = median - iqr
plus = median + iqr

负数为69,正数为71 (使用高于和低于中位数的IQR )。

但是,当迭代列表并尝试删除iqr上面/下面的项(87,89)时。他们不会被从名单中删除。

代码语言:javascript
复制
for i in l:
    if i < minus:
        del i
    if i > plus:
        del i

当我打印这个列表时,它仍然显示87,89。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-11 21:29:11

代码语言:javascript
复制
for  ele in l[:]:
    if ele < minus or ele > plus:
        l.remove(ele)

您必须复制l l[:]并使用l.remove修改实际列表本身。

票数 1
EN

Stack Overflow用户

发布于 2014-12-11 21:30:59

del不是你要找的接线员。它用于删除对对象的引用,因此在垃圾收集中非常有用。

你可能在找这个:

代码语言:javascript
复制
import numpy as np
l = [69, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 87, 89]
iqr = np.subtract(*np.percentile(l, [75, 25]))
median = np.percentile(l, 50)
minus = median - iqr
plus = median + iqr

arr = np.array(l)
arr[ (minus < arr) & (arr < plus)]
票数 1
EN

Stack Overflow用户

发布于 2014-12-11 21:32:13

只需将其转换为numpy数组,然后再从该数组中计算:

代码语言:javascript
复制
l = np.array(l)
l[(l >= 69) & (l <= 71)]

就这样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27432627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档