Mergesort Python列表中的数字排序

Mergesort Python列表中的数字排序,python,mergesort,Python,Mergesort,我正在尝试用Python实现mergesort算法。我的输入文件file.txt的格式如下: 1 2 3 4 5 55 60 82 19 但是,我的输出变成(注意列表的第二个元素): 有人能解释一下为什么mergesort的这个实现没有将19放在Python列表中的正确位置吗 import csv list = [] with open('file.txt') as f: lines = csv.reader(f, delimiter='\n') for line in li

我正在尝试用Python实现mergesort算法。我的输入文件file.txt的格式如下:

1
2
3
4
5
55
60
82
19
但是,我的输出变成(注意列表的第二个元素):

有人能解释一下为什么mergesort的这个实现没有将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)

我认为这应该解释发生了什么:

matt$ python
>>> '19' < '2'
True
>>> int('19') < int('2')
False
matt$python
>>> '19' < '2'
真的
>>>int('19')
比较字符串时,字符串
'19'
小于字符串
'2'
,因为字符
'1'
位于字符
'2'
之前


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

避免使用Python关键字命名变量,例如
list=[]
list
不是Python关键字:
matt$ python
>>> '19' < '2'
True
>>> int('19') < int('2')
False