2015-07-15 3 views
4

Я хочу, чтобы Bubblesort файл по номерам, и у меня есть 2 ошибки в моем коде.строки сортировки файла python

линий файла содержит: строка-пространственно-номер

Ответ неправильный сортировки, а иногда я также IndexError, потому что x.append (строка [л]) находится вне диапазона

Надежда кто-то может помочь мне

код:

#!/usr/bin/python 
filename = "Numberfile.txt" 
fo = open(filename, "r") 

x, y, z, b = [], [], [], [] 

for line in fo:    # read 
    row = line.split(" ") # split items by space 
    x.append(row[1])   # number 


liste = fo.readlines() 
lines = len(liste) 
fo.close() 

for passesLeft in range(lines-1, 0, -1): 
    for i in range(passesLeft): 
     if x[i] > x[i+1]: 
       temp = liste[i] 
       liste[i] = liste[i+1] 
       liste[i+1] = temp 

fo = open(filename, "w") 
for i in liste: 
    fo.writelines("%s" % i) 
fo.close() 

ответ

1

Кажется, что у вас есть пустые строки в файле.

Изменение:

for line in fo:    # read 
    row = line.split(" ") # split items by space 
    x.append(row[1])   # number 

с:

for line in fo:    # read 
    if line.strip(): 
     row = line.split(" ") # split items by space 
     x.append(row[1])   # number 

Кстати, вы лучше использовать re.split с регулярным выражением \s+:

re.split(r'\s+', line) 

который сделает ваш код будет более устойчивым - он сможет обрабатывать несколько мест.

Для второго выпуска Anand протекала меня: вы сравниваете строки, если вы хотите, чтобы сравнить номера вы должны обернуть его с вызовом int()

+0

Оооо спасибо !!! Иногда мне нужен молот для моей головы ... – SadCroco

+0

@SadCroco после того, как вы натолкнулись на него много раз (и забиваете головой о стену, как я делал каждый раз ...) - вы, наконец, получите ее;) – alfasin

1

Первого вопроса, если вы сортировка на основе числа и числа могут быть несколькими цифрами, тогда ваша логика не будет работать, потому что x - это список строк, а не целых чисел, а при сравнении строк он сравнивает лексикографически, то есть '12' меньше 2 и т. д. Вы должны преобразовать число до int до добавления в список x.

Также, если вы получаете ошибку ListIndex, у вас могут быть пустые строки или строки без 2 элементов, вы должны правильно проверить ввод, также вы можете добавить условие, чтобы игнорировать пустые строки.

код -

for line in fo: 
    if line.strip(): 
     row = line.split(" ") 
     x.append(int(row[1])) 
Смежные вопросы