0

我收到了一个类似于以下内容的文本文件...

hello 20
world 30
i'm 50
ok 20

我正在尝试使用插入排序来排列数据的数字部分。我的代码如下所示...

def insertion_sort():
    filename = input('Enter filename: ')
    lst = []
    for line in open(filename):
        lst.append(int(line))
    print(lst)
    for index in range(1,len(lst)):
        value = lst[index]
        leftvalue = index -1
        while leftvalue >= 0 and lst[leftvalue] > value:
            if value < lst[leftvalue]:
                lst[leftvalue + 1] = lst[leftvalue]
                lst[leftvalue] = value
                leftvalue = leftvalue - 1
            else:
                break
    return lst == insertion_sort()

我收到以下错误... ValueError: invalid literal for int() with base 10: 'Merchant_0 96918\n'

我尝试使用 float 替换 int,但我无法将字符串转换为浮点数。

4

1 回答 1

0

你不能得到一个整数:

lst.append(int(line))

如果行包含,说“世界 30”

你想得到什么?如果要获取数值,请尝试:

int(line.split(' ')[1])

或者更好(即使输入行中有多个空格也有效):

import re
reobj=re.search('(\d+)$',line)
int(reobj.group(1))

整个排序过程变成:

import operator
import re

lines = {}
for line in open('tst.txt'):
    reobj=re.search('(\d+)$',line)
    int_key=int(reobj.group(1))
    value=line[0:reobj.start()]
    lines[int_key]=value

# See : http://stackoverflow.com/questions/613183/python-sort-a-dictionary-by-value?rq=1
print "Sorted : ", sorted(lines.iteritems(), key=operator.itemgetter(0))
于 2013-10-08T16:08:43.457 回答