Avatar ·

Как поменять значения в списке, не создавая новый список?

📁 python, работа

Стандартный способ через списковое включение (list comprehension):

my_list=[1,2,3,4,5,6]my_list_1=[i*5 for i in my_list]print(my_list_1)

Почему не могу сделать также с исходным списком:

my_list=[1,2,3,4,5,6]for i in my_list:    i*=5print(my_list)

Этот код не работает, почему?

Avatar ·

Для данной конструкции:

for i in my_list:    i*=5

Python создает новую переменную i в которую попадают последовательно значения из списка. В итоге вы меняете значения переменной i, список остается неизменным.

In [136]: my_list=[1,2,3,4,5,6]     ...: for i in my_list:     ...:     i*=5     ...:     print(i, my_list)     ...:5 [1, 2, 3, 4, 5, 6]10 [1, 2, 3, 4, 5, 6]15 [1, 2, 3, 4, 5, 6]20 [1, 2, 3, 4, 5, 6]25 [1, 2, 3, 4, 5, 6]30 [1, 2, 3, 4, 5, 6]

В следующей строке кода вы присваиваете переменной my_list_1 результат работы list comprehension (список):

my_list_1=[i*5 for i in my_list]

Решение:

my_list[:] = [i*5 for i in my_list]print(my_list)#[5, 10, 15, 20, 25, 30]

PS подробнее о присвоениях спискам и срезах можно прочитать в

Войдите чтобы оставить ответ

Блоги