2013-10-08 45 views
0

我給出類似以下的文本文件...故障使用插入排序與Python列表

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'

我已經使用浮動替換爲int試過,但我不能字符串轉換爲浮動。

+0

那麼,你認爲字符串'Merchant_0 96918 \ n'應該轉換爲什麼整數? –

+0

它應該轉換爲數字96918 – steve

+1

所以你試過了什麼,爲了提取你想要轉換爲整數的字符串的部分?你知道Python中的哪些字符串處理函數? –

回答

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))