#python
#python
Вопрос:
Я пытаюсь использовать цикл for для изменения значений в списке на основе значений во втором списке. Следовательно, я думал, что функция «zip» пригодилась бы, однако я не получаю ожидаемого результата. Смотрите пример здесь:
list_a = [0,0,0,0]
list_b = [1,2,3,4]
for a, b in zip(list_a, list_b):
a = b*2
Я думал, что это изменяет list_a, однако это не так. Насколько я понимаю, внутри цикла «a» сначала было равно list_a[0]
, затем list_a[1]
и т.д., Другими словами, представлениям списка.
На самом деле у меня есть 2 вопроса:
а) что такое «a» и «b» внутри цикла, если они не являются представлениями двух списков?
б) существует ли pythonic способ реализации этого цикла (т. Е. Что-то отличное от зацикливания i in range(len(list_a))
?
Комментарии:
1. pythonic способ? вероятно, выполняйте свои операции с пониманием и создайте новый список, присвоив ему значение list_a в конце.
2.
a=..
не изменяетсяa[0]
. Он просто присваивает новое значение переменной.view
это концепция numpy-массива, а не списка.3.«сначала был равен list_a[0], затем list_a[1] и т.д., Другими словами, просмотр списка». Нет, они не являются представлениями.
list_a[i]
возвращает объект, содержащийся по этому индексу в списке.a = list_a[0]
заставляет имяa
ссылаться на некоторый объект, который является первым элементомlist_a
, но этот объект не знает об этом4. Это просто еще одни ссылки, а не указатели.
Ответ №1:
Вы можете попробовать что-то вроде:
list_a = [0,0,0,0]
list_b = [1,2,3,4]
for i, b in enumerate(list_b):
list_a[i] = b*2
Вы можете получить тот же результат с:
[b*2 for b in list_b]