任务:
具有列表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
答案 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