2016-03-20 3 views
1

Я пытаюсь изменить порядок списка, найдя три ошибки в этой функции. Эта функция должна отменить первый и последний элементы списка, второй и второй на последние элементы и т. Д. Я считаю, что нашел два, но у меня проблемы с фиксацией линии list[j] = y.Обратный список по своп-концу

def reverse(list): 
    """Reverses elements of a list.""" 
    for i in range(len(list)): 
     j = len(list) - i 
     x = list[i] 
     y = list[j-1] 
     list[i] = x 
     list[j] = y 

l = ['a', 'b', 'c', 'd', 'e'] 
reverse(l) 
print(l) 
+0

Вы понимаете код? Попытайтесь увидеть, какие два элемента вы меняете ... тогда это будет очевидно. Также обратите внимание, сколько раз вы меняете каждый элемент (наблюдая, как старые кореды Лорел и Харди могут помочь найти это). – Amadan

+1

Что случилось с 'mylist [:: - 1]'? – Evert

+3

@Evert: Я предполагаю, что это отладка домашней работы. Дело в том, чтобы не переписывать списки, а находить ошибочную логику. – Amadan

ответ

-1

У вас есть несколько проблем. Ваша первая проблема заключается в том, что вы используете list[j] = y вместо list[j-1] = x. Вы правильно определили y с j-1, но вы должны изменить list[j-1] на другой, x. Другая проблема заключается в том, что вы переходите от начала списка до конца. Как только вы перейдете на более чем половину пути, вы отмените свою работу. Вам также не нужно использовать len(list)-i, потому что вы можете просто использовать -i. Вот обновленный код:

def reverse(seq): 
    """Reverses elements of a list.""" 
    for i in range(len(seq)//2): 
     x = seq[i] 
     y = seq[-i-1] 
     seq[i] = y 
     seq[-i-1] = x 

l = ['a', 'b', 'c', 'd', 'e'] 
reverse(l) 
print(l) 

Выход:

['e', 'd', 'c', 'b', 'a'] 

Вам даже не нужно определить x и y. Вместо этого сделайте следующее:

def reverse(seq): 
    """Reverses elements of a list.""" 
    for i in range(len(list)//2): 
     seq[i], seq[-i-1] = seq[-i-1], seq[i] 

Я также изменил свое название. Вероятно, есть лучшее имя, чем seq, но list неприемлемо, потому что оно конфликтует со встроенным типом.

+0

не использовать список, это встроенный. –

+0

@NamitSingal: Вы абсолютно правы. Я забыл изменить это, но теперь это изменилось. – zondo

+2

@NamitSingal: Педантичность: встроенное, но не ключевое слово.Если бы это было ключевое слово, вы не могли его использовать. – ShadowRanger

-1

Используйте этот код:

l = ['a', 'b', 'c', 'd', 'e'] 
l=l[::-1] 
print(l) 

Почему вы хотите, чтобы усложнить эту простую конструкцию? Или если вы не хотите делать это таким образом, попробуйте использовать:

l.reverse() 

функция. Python имеет множество функций, готовых к использованию.

+5

Прочитать другие комментарии. 'l.reverse()' является правильным ответом на другой вопрос. Никто не пишет код и не знает, сколько ошибок он должен иметь; это должно быть задание. – Amadan

0

Домашнего заданию я подозреваю ...

Но - нам все нужно отдохнуть от домашней работы. Перевернув весь список, вы дважды меняете его.

def reverse(list): 
    """Reverses elements of a list.""" 
    for i in range(len(list)/2): 
     j = i + 1 
     x = list[i] 
     y = list[-j] 
     list[-j] = x 
     list[i] = y 

l = ['a', 'b', 'c', 'd', 'e'] 
l=reverse(l) 
print(l) 

в результате

['e', 'd', 'c', 'b', 'a'] 
Смежные вопросы