2017-10-12 179 views
0

早上好大家好, 这里是我的功能是应该做一些数据的递归排序插入: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)] 

是否有人可以纠正我的功能? 在此先感谢。

+1

当您在递归调用中传递副本时,您正在插入列表的一个*副本中:'neighbors [1:]'。 –

+0

不说缺乏正确的缩进 –

+0

此外,而不是重新发明轮子,使用['bisect'](https://docs.python.org/3/library/bisect.html)模块及其''insort * '方法 –

回答

0

这应该工作。

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

非常感谢!这就是我一直在寻找的! –