2013-10-08 1 views
0

Je me donne un fichier texte qui ressemble à ce qui suit ...Problème en utilisant le tri par insertion avec une liste Python

hello 20 
world 30 
i'm 50 
ok 20 

Je suis en train d'utiliser le tri par insertion pour organiser la partie numérique des données. Mon code ressemble à ce qui suit ...

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

Je reçois l'erreur suivante ... ValueError: invalid literal for int() with base 10: 'Merchant_0 96918\n'

J'ai essayé d'utiliser flotteur en remplacement avec int, mais je ne peux pas convertir des chaînes de flotteurs .

+0

Eh bien, quel entier pensez-vous que la chaîne 'Merchant_0 96918 \ n' devrait convertir en? –

+0

Il devrait convertir au nombre 96918 – steve

+1

Alors qu'avez-vous essayé, afin d'extraire la partie de la chaîne que vous voulez convertir en entier? Quelles fonctions de gestion de chaînes en Python connaissez-vous? –

Répondre

0

Vous ne pouvez pas obtenir un nombre entier avec:

lst.append(int(line))

si la ligne contient, dites 'monde 30'

Que essayez-vous d'obtenir exactement? Si vous souhaitez obtenir la valeur numérique, essayez:

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

Ou mieux (fonctionne même s'il y a plusieurs espaces dans les lignes d'entrée):

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

Le processus de tri tout devient:

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