#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