0

我知道这个问题可能不清楚。我将尝试解释。

我有一个场景,我需要验证一个值序列,5,10,15,20....,只是生成序列的系统不是很准确,有时它可能会错过这些值或重复几个值,例如5, 10,10,20,25,30,40.

所以你可以看到有一个公差5-10

这没关系。我必须验证序列不会像倒退一样5,10,15,10.. or 5,10,9,....

我需要使用这样的逻辑编写PASS FAIL条件,如果它看到单调递增的序列并偶尔丢失或重复,则失败,如果它看到值倒退或相差超过10 (like 5, 20, 15...)

有人可以帮我确定正确的逻辑吗

4

3 回答 3

1

单线:

def validate(li):
    return all(x==y or 5<=(y-x)<=10 for x,y in zip(li,li[1:]))

如果您真的想断言您的数据来自单调递增 5 的源,您可能还需要添加一些逻辑,即您的序列 ( li[-1]) 的最大值约为5*len(li) + li[0].

于 2014-02-26T06:18:31.803 回答
0

一个简单的怎么样:

previousVal = ###
actualVal = ###

difference = actualVal - previousVal

if 0 <= difference <= 10  ## Change acc. to your requirement. Unclear if its 5-10 or 0-10
    #PASS
else:
    #FAIL!

如果它是您作为输入获得的列表,那么您可以使用移位 1 的列表压缩原始列表,并遍历元组。

于 2014-02-26T06:18:22.020 回答
0

如果序列是一个列表l,你可以使用这个:

'FAIL' if any(l[i]<l[i-1] or l[i]-l[i-1]>10 for i in xrange(1,len(l))) else 'PASS'
于 2014-02-26T06:20:15.147 回答