2015-07-06 111 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'之前。

如果将字符串转换为数字,排序应该正确输出。