Mergesort Python 列表中的数字排序
Mergesort Python numerical ordering in a list
我正在尝试在 Python 中实现归并排序算法。我的输入 file.txt 的格式为:
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)
我认为这应该可以解释发生了什么:
matt$ python
>>> '19' < '2'
True
>>> int('19') < int('2')
False
比较字符串时,字符串'19'
小于字符串'2'
,因为字符'1'
在字符'2'
之前。
如果将字符串转换为数字,排序应该正确。
我正在尝试在 Python 中实现归并排序算法。我的输入 file.txt 的格式为:
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)
我认为这应该可以解释发生了什么:
matt$ python
>>> '19' < '2'
True
>>> int('19') < int('2')
False
比较字符串时,字符串'19'
小于字符串'2'
,因为字符'1'
在字符'2'
之前。
如果将字符串转换为数字,排序应该正确。