Python列表排序上插入
问题描述:
早上好大家好, 这里是我的功能是应该做一些数据的递归排序插入:Python列表排序上插入
def sorted_insert(w_i,sim,neighbors):
if neighbors==[]:
neighbors.append((w_i,sim))
elif neighbors[0][1]<sim:
neighbors.insert(0,(w_i,sim))
else:
sorted_insert(w_i,sim,neighbors[1:])
return neighbors
的问题是,这个功能不会插入值在中间,这里是一系列插入:
>>> n=[]
>>> n=sorted_insert("w1",0.6,n)
>>> n=sorted_insert("w1",0.3,n)
>>> n=sorted_insert("w1",0.5,n)
>>> n=sorted_insert("w1",0.8,n)
>>> n=sorted_insert("w1",0.7,n)
>>> n
[('w1', 0.8), ('w1', 0.6)]
是否有人可以纠正我的功能? 在此先感谢。
答
这应该工作。
def sorted_insert(w_i,sim,neighbors, i=0):
if len(neighbors) == i or sim > neighbors[i][1]:
neighbors.insert(i, (w_i,sim))
else:
sorted_insert(w_i,sim,neighbors, i+1)
n=[]
sorted_insert("w1",0.6,n)
sorted_insert("w1",0.3,n)
sorted_insert("w1",0.5,n)
sorted_insert("w1",0.8,n)
sorted_insert("w1",0.7,n)
print n
# [('w1', 0.8), ('w1', 0.7), ('w1', 0.6), ('w1', 0.5), ('w1', 0.3)]
+0
非常感谢!这就是我一直在寻找的! –
当您在递归调用中传递副本时,您正在插入列表的一个*副本中:'neighbors [1:]'。 –
不说缺乏正确的缩进 –
此外,而不是重新发明*,使用['bisect'](https://docs.python.org/3/library/bisect.html)模块及其''insort * '方法 –