#python #python_3x #списки
Стандартный способ через списковое включение (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*=5
print(my_list)
Этот код не работает, почему?
Ответы
Ответ 1
Для данной конструкции: 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 подробнее о присвоениях спискам и срезах можно прочитать в ответах на этот вопрос в англоязычной версии SOОтвет 2
Вы можете менять значение элемента списка, но вам нужно знать его индекс, для этого используются следующие способы: Через range: my_list = [1, 2, 3, 4, 5, 6] for i in range(len(my_list)): my_list[i] = my_list[i] * 5 print(my_list) # [5, 10, 15, 20, 25, 30] Через enumerate: my_list = [1, 2, 3, 4, 5, 6] for i, x in enumerate(my_list): my_list[i] = x * 5 print(my_list) # [5, 10, 15, 20, 25, 30] PS. А код с списковым включением: my_list=[1,2,3,4,5,6] my_list_1=[i*5 for i in my_list] print(my_list_1) # [5, 10, 15, 20, 25, 30] тоже самое что: my_list=[1,2,3,4,5,6] my_list_1=[] for i in my_list: my_list_1.append(i * 5) print(my_list_1) # [5, 10, 15, 20, 25, 30]
Комментариев нет:
Отправить комментарий