2017-10-12 178 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

非常感謝!這就是我一直在尋找的! –