Python 插值问题,当循环遍历将数字插入到列表时



任务:
一个函数,它接受列表lst和整数n
如果列表中任意两个连续元素之间的差大于 n ,则插入两个元素的平均值作为它们之间的新元素。重复该过程,直到所有元素之间的差异小于 n

问题:
需要再次遍历整个问题时出错。
首字母:[9.5, 10.0]
循环 1:[9.5, 9.75, 10.0]
调试时,我的 loop2 会跳过9.625
循环 2:[9.5, 9.75, 9.875, 10.0] --不正确

循环 2:
[9.5, 9.625, 9.75, 9.875, 10.0] --正确

我已经尝试了sort()函数,该函数导致通过了除最后一个测试之外的所有内容,该测试具有无序数字列表。所以我宁愿在下面的代码中使用insert()

法典:

def interpolate(lst, n):
    count=0
    if lst==[]:
        return []
    if len(lst)==1:
        return lst
    final_val=lst[-1]
    while (lst[1]-lst[0])>n:
        x=(lst[count+1]-lst[count])/2
        length=len(lst)
        if abs(lst[count]-lst[count+1])>n:
            y=lst[count]+x
            lst.insert(count+1,y)
        count+=1
    return lst
print(interpolate([], 0.5))  
#--lst = [] #--works
print(interpolate([9.0], 0.5))
#--lst = [9.0] #--works
print(interpolate([9.0, 10.0], 0.5))
#--lst = [9.0, 9.5, 10.0] #--works
print(interpolate([9.5, 10.0], 0.2))
#--lst = [9.5, 9.625, 9.75, 9.875, 10.0] #--ERROR
print(interpolate([-7.5, 10.66, 11.43], 5.3))
#--lst = [-7.5, -2.96, 1.58, 6.12, 10.66, 11.43] #--ERROR
print(interpolate([-4.0, -3.5, -3.0], 0.5))
#--lst = [-4.0, -3.5, -3.0]) #--works
print(interpolate([-4.0, -3.0, -3.5], 0.5))
#--lst = [-4.0, -3.5, -3.0, -3.5] #--works

这里的问题是您在每次迭代后都不会重置计数器(因此程序搜索索引高于列表长度的列表元素( 我在 while 循环的末尾添加了一个 if 语句

if (count>len(lst)-2):
            count=0

因此,它在解决问题时保持一切风格

def interpolate(lst, n):
    count=0
    if lst==[]:
        return []
    if len(lst)==1:
        return lst
    final_val=lst[-1]
    while (lst[1]-lst[0])>n:
        x=(lst[count+1]-lst[count])/2
        length=len(lst)
        if abs(lst[count]-lst[count+1])>n:
            y=lst[count]+x
            lst.insert(count+1,y)
        count+=1
        if (count>len(lst)-2):
            count=0
    return lst

最新更新