2015-01-13 39 views
1

我正在使用以下函數來按遞增順序對列表進行排序。但是,雖然我的功能適用於列表,例如:[1,5,6,9,3][56,43,16,97,45],但它不適用於表格列表:[20,10,1,3,50]在python中對列表進行排序的算法無法正常工作

在這種情況下,計算機似乎認爲3> 20和3> 10和3在我得到的「排序」列表中的50之前(倒數第二)結束。更確切地說,我得到的結果是:[1,10,20,3,50]

這裏是我的代碼:

def function_sort(L): 

    for j in range(len(L)): 
     min=j 
     for i in range(j+1,len(L)): 
      if L[i]<L[min]: 
       min = i 

     if(min != j): 
      L[j],L[min] = L[min],L[j] 

      print L 
    return L 

誰能請解釋我是怎麼回事?

+1

爲什麼不使用內建的'.sort()'方法? – Scironic

+1

@Scironic:對我來說,這聽起來像是一個非常合理的編程練習。 – NPE

+1

因爲這是一個關於主題,合理和明確闡述的問題,所以我不能說我明白了這些讚譽。 – NPE

回答

8

聽起來好像你的列表是由字符串而不是整數組成的,你最終得到的排列順序爲lexicographically

舉例來說,考慮以下因素:

>>> 10 < 2 
False 
>>> '10' < '2' 
True 

要解決此問題,在排序前轉換元素整數:

L = map(int, L) 

附:我建議不要使用min作爲變量名,因爲它的內置函數爲shadowsmin()

+0

或者使用「鍵」進行排序,例如'L.sort(鍵= INT)' – CoryKramer