gpt4 book ai didi

python - Algos - 从 Python 中的整数列表中删除极值?

转载 作者:行者123 更新时间:2023-11-28 16:34:28 24 4
gpt4 key购买 nike

我想从 Python 中的整数列表中消除极端值。我会说我的问题是设计之一。这是我到目前为止所做的:

listToTest = [120,130,140,160,200]

def function(l):
length = len(l)
for x in xrange(0,length - 1):
if l[x] < (l[x+1] - l[x]) * 4:
l.remove(l[x+1])
return l

print function(listToTest)

所以它的输出应该是:120,130,140,​​160 没有 200,因为这比其他的太远了。

如果 200 是最后一个或者只有一个极端值,那么这行得通。但是,这样的列表会出现问题:

listToTest = [120,200,130,140,160,200]

或者

listToTest = [120,130,140,160,200,140,130,120,200]

因此,最后一个列表的输出应该是:120,130,140,​​160,140,​​130,120。 200 应该消失了,因为它比“通常”大很多,后者围绕 ~130-140。为了说明这一点,这里有一张图片: enter image description here显然,我的方法是行不通的。一些想法:- 我需要以某种方式在 x 和 x+1 之间进行比较,看看接下来的两对是否比最后一对有更大的差异,然后如果有,差异更大的那对应该消除一个元素(最大的一),然后,递归地再次执行此操作。我想我也应该有一个“可接受的差异”,所以它知道差异何时可以接受并且不会破坏递归性,所以我最终只有 2 个值。

我试过写它,但到目前为止运气不好。

最佳答案

您可以在此处使用统计数据,消除超出均值 n 个标准差的值:

import numpy as np
test = [120,130,140,160,200,140,130,120,200]
n = 1
output = [x for x in test if abs(x - np.mean(test)) < np.std(test) * n]
# output is [120, 130, 140, 160, 140, 130, 120]

关于python - Algos - 从 Python 中的整数列表中删除极值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28311599/

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