【发布时间】:2015-04-03 09:32:43
【问题描述】:
我想从 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)
所以这个输出应该是:没有 200 的 120,130,140,160,因为这距离其他的太远了。
这行得通,因为 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 旋转。 为了说明这一点,这是一张图片: 显然,我的方法行不通。一些想法: - 我需要以某种方式在 x 和 x+1 之间进行比较,看看接下来的两对是否比最后一对有更大的差异,如果是,那么差异较大的那对应该消除一个元素(最大的一)然后,递归地再次执行此操作。我认为我也应该有一个“可接受的差异”,所以它知道什么时候差异是可以接受的并且不会破坏递归性,所以我最终只有 2 个值。
我试过写它,但到目前为止没有运气。
【问题讨论】:
标签: python list loops recursion