Как отнять 1 от всех чисел в списке, одной строкой?
my_list = [1, 2, 3, 4, 5]
my_list[:] -= 1
print(my_list)
my_list = [1, 2, 3, 4, 5]
my_list[:] -= 1
print(my_list)
Я тоже украду комментарий у ZxNuClear:
my_list = [x - 1 for x in my_list]
У решения есть мелкий недостаток. Вернее два: my_list
меняет id
в процессе обновления (что иногда полезно и важно, а иногда вредно и ломает программу) и создаётся копия списка в памяти.
Сохранить id
можно так (автор вопроса использовал эту конструкцию, значит он хочет сохранить объект?):
my_list[:] = [x - 1 for x in my_list]
Копирование останется. Пробуем удалить и его:
my_list[:] = (x - 1 for x in my_list)
Кажется что не нужна память под список в правой части присваивания, но нет, нужна. my_list[:] = [...]
и my_list[:] = (...)
делают одно и тоже. В коде Питона сделано так что если слева список[:]
а справа не список (или другой контейнер с известной длиной), то генератор из правой части копируют в список. Копия осталась на месте, несмотря на изменение в коде. :(
Но "я хоть попытался..." - Пролетая над гнездом кукушки.
1 способ
my_list = [1, 2, 3, 4, 5]
my_list = [x - 1 for x in my_list]
2 способ
my_list = [1, 2, 3, 4, 5]
my_list = list(map(lambda x: x - 1, my_list))
есть такое приходится делать часто, используйте numpy
import numpy as np
arr = [7, 5, 9, 0]
arr = np.array(arr)
arr -= 1
print(arr)