2015-07-06 79 views
2

我想在Python中實現mergesort算法。我的輸入,file.txt的,是下面的形式:Mergesort列表中的Python數字排序

1 
2 
3 
4 
5 
55 
60 
82 
19 

然而,我的輸出變爲(注意該列表的第二個元素):

[['1'], ['19'], ['2'], ['3'], ['4'], ['5'], ['55'], ['60'], ['82']] 

是否有人可以解釋爲什麼這個實現的歸併未能將19放入Python列表中的適當位置?

import csv 

list = [] 
with open('file.txt') as f: 
    lines = csv.reader(f, delimiter='\n') 
    for line in lines: 
     list.append(line) 

def mergesort(list): 
    mid = len(list)//2 
    lft, rgt = list[:mid], list[mid:] 
    if len(lft) > 1: lft = mergesort(lft) 
    if len(rgt) > 1: rgt = mergesort(rgt) 
    res = [] 
    while lft and rgt: 
     if lft[-1] >=rgt[-1]: 
      res.append(lft.pop()) 
     else: 
      res.append(rgt.pop()) 
    res.reverse() 
    return (lft or rgt) + res 

print mergesort(list) 
+0

避免使用Python關鍵字命名變量,例如'list = []' –

+0

'list'是* not *一個Python關鍵字:http://stackoverflow.com/questions/14595922/list-of-python-keywords – warship

回答

6

我想這應該解釋正在發生的事情:

matt$ python 
>>> '19' < '2' 
True 
>>> int('19') < int('2') 
False 

當比較字符串,字符串'19'小於字符串'2'因爲字符'1'而來的字符'2'之前。

如果將字符串轉換爲數字,排序應該正確輸出。