通过插入数字循环到列表时,Python会插值问题

时间:2019-05-28 10:21:05

标签: python-3.x

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

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

loop2:
[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

1 个答案:

答案 0 :(得分:0)

这里的问题是,每次迭代后您都不会重置计数器(因此程序会搜索索引长度大于列表长度的列表元素),我在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