Mergesort Python列表中的数字排序
我正在尝试用Python实现mergesort算法。我的输入文件file.txt的格式如下: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
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