任务:
一个函数,它接受列表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