lis中的Mergesort-Python数字排序

2024-04-23 17:37:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python实现mergesort算法。我的意见,文件.txt,其形式为:

1
2
3
4
5
55
60
82
19

但是,我的输出变成(注意列表的第二个元素):

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

有人能解释一下为什么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)

Tags: csvtxt列表leniflinerespop
1条回答
网友
1楼 · 发布于 2024-04-23 17:37:57

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

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

比较字符串时,字符串'19'小于字符串'2',因为字符'1'位于字符'2'之前。你知道吗

如果将字符串转换为数字,则排序应该正确。你知道吗

相关问题 更多 >