переверните список и добавьте его в istelf

#python #python-3.x #list

#питон #python-3.x #Список

Вопрос:

Я пытаюсь ввести список в функцию, а затем вывести список, а затем добавить в него обратную часть списка, но по какой-то причине всякий раз, когда я переворачиваю переменную, она также переворачивает список

 def mirror(list):  reversel = list  reversel.reverse()  list.extend(reversel)  return list        test = ["alpha", "beta"] print(mirror(test))  

выход

 ['beta', 'alpha', 'beta', 'alpha']  

желаемый результат

 ["alpha","beta","beta","alpha"]  

Ответ №1:

Вы можете использовать нарезку:

 def mirror(lst):  return lst   lst[::-1]  test = ["alpha", "beta"] print(mirror(test)) # ['alpha', 'beta', 'beta', 'alpha']  

Проблема в предоставленном коде заключается в том, что (i) reversel = list (но не используется list в качестве имени) не копирует объект и (ii) reverse() изменяет список на месте. Таким образом, эти две строки кода переворачивают список list (а также reversel ). В результате сейчас list и то и reversel другое есть ["beta", "alpha"] . Затем , после list.extend(reversel) , list становится тем, что вы наблюдаете.

Кроме того, есть еще одна тонкая проблема; обычно не рекомендуется выполнять оба следующих действия: (i) изменять данный объект и (ii) возвращать объект; это может привести к путанице (я полагаю). Лучше выполнить только один из них; изменить объект на месте (например reverse ) или не изменять объект, но возвращать измененную копию объекта (например reversed ).

Ответ №2:

Вот решение без использования reverse() .

 def mirror(list_to_mirror):    reversel = list_to_mirror  reversel = reversel[::-1]  #This is an equivilant to reverse()  list_to_mirror.extend(reversel)    return list_to_mirror  if __name__ == "__main__":  test = ["alpha", "beta"]  print(mirror(test))  

Комментарии:

1. Вы делаете это слишком сложным, вводя reversel переменную. Просто поместите первые строки кода в функцию и используйте list_to_mirror.extend(list_to_mirror[::-1]) .

Ответ №3:

Это должно сработать —

 def mirror(list):  reversel = [i for i in list]  reversel.reverse()  list.extend(reversel)  return list        test = ["alpha", "beta"] print(mirror(test))  

при использовании ‘=’ он сохраняет местоположение переменной. Поэтому при использовании такой функции, как обратная, меняются оба значения.

Ответ №4:

Способ, который не требует создания и удаления копии:

 def mirror(lst):  lst  = reversed(lst)  return lst