Python 查找查找列表中相邻值之间差异的函数,然后根据阈值进行测试

Python 查找查找列表中相邻值之间差异的函数,然后根据阈值进行测试,python,for-loop,python-3.x,average,Python,For Loop,Python 3.x,Average,所以基本上我需要一个函数来计算列表中每个值之间的差值,然后根据阈值进行测试。如果两个相邻数字之间的差值大于给定阈值,则应将两个数字之间的平均值依次插入列表中。如果差异不大于,则应返回原始列表。最多只能插入一个数字 我有 def test(list, Threshold): for i in range(len(list)): if abs((list[i] - list[i+1])) > Threshold : ((list[i] +

所以基本上我需要一个函数来计算列表中每个值之间的差值,然后根据阈值进行测试。如果两个相邻数字之间的差值大于给定阈值,则应将两个数字之间的平均值依次插入列表中。如果差异不大于,则应返回原始列表。最多只能插入一个数字

我有

def test(list, Threshold):

for i in range(len(list)): 

         if abs((list[i] - list[i+1])) > Threshold : 
               ((list[i] + list[i+1])/2) 
               (list.append((list[i] + list[i+1])/2)) 
               ( list.sort()) 
         else: 
               ( list) 

Z = [1,2,4,4.5] 

test(Z,1.5) 

Z = [1,2,3.0,4,4.5]

这是唯一可行的方案。如果没有一个超过阈值,或者如果有两个倍数超过阈值,则不起作用。我知道当你添加新号码时,我正朝着正确的方向前进。下面是您的函数的编辑版本。还要注意,我已经调整了for循环的范围,以防止索引错误。比较
list[i]
list[i+1]
时,
i+1
不能大于列表大小,因此
i
必须停在
len(list)-1


好的,break修复了超过阈值的问题。最后一种情况是,如果所有数字都小于阈值,仍然会出现错误。我的if语句是否措辞错误?Z=[1,2,3,4]将返回“列表索引超出范围”,这就是为什么我将for循环限制为
范围(len(list-1))
注意
-1
,否则当它到达列表的末尾时,它会尝试与超过末尾的一个进行比较,这就是您得到错误的地方
def test(list, Threshold):

    for i in range(len(list)-1):    # <-- note the change in limit

        if abs(list[i] - list[i+1]) > Threshold:
            list.append((list[i] + list[i+1])/2) 
            list.sort()
            break    # this will stop the loop
z = [1,2,4,4.5]
test(z,1.5)
z
[1, 2, 3, 4, 4.5]