В этом конкретном случае вы не можете.Это потому, что вы переназначаете объект вместо новой ссылки.
В итерации типа "foreach", подобной этой:
for element in inputList:
Вы выполняете итерацию объект самого элемента в списке.Но в этом случае это str
объект, который является неизменным.то есть, когда вы пытаетесь присвоить эту строку:
element = element.strip()
Вы переназначаете элемент с новым объектом из вырезанного содержимого оригинала.Поскольку это новый объект, он никак не связан с самим inputList
.
Однако во втором примере вы сейчас перебираете список индексов на основе inputList
:
for i in range(len(inputList)):
# range(len(inputList)) -> range(0, 6)
Когда вы просматриваете список, обратите внимание, что вы снова переназначаете определенный индекс inputList
:
inputList[i] = inputList[i].strip()
Это присваивает объект new вернуться к inputList[i]
.Это уже не тот str
объект, который у вас когда-то был в списке.
Сказав, что в других случаях использования "foreach", который вы ищете, прекрасно работает, какПока объект изменчив .Обратите внимание на следующий пример:
lst = [[] for _ in range(5)]
lst
# [[], [], [], [], []]
for i in lst:
i.append('foo')
lst
# [['foo'], ['foo'], ['foo'], ['foo'], ['foo']]
Обратите внимание на разницу: i
не переназначено , но напрямую изменено методом append()
.Чтобы доказать, что i
является прямой ссылкой на объект согласно вашему ожиданию, если бы я сделал это после завершения итерации :
i.append('bar')
lst
# [['foo'], ['foo'], ['foo'], ['foo'], ['foo', 'bar']]
id(i)
# 61353816
id(lst[-1])
# 61353816
Посмотрите, как последний элемент lst
теперь добавлен.Это потому, что i
все еще сохраняет ссылку.id()
также показывает окончательное доказательство того, что вы спрашиваете.
Если бы я написал такую итерацию следующим образом:
for i in lst:
i = ['foo']
lst
# [[], [], [], [], []]
id(i)
# 61354112 <-- different obj id
id(lst[-1])
# 61353816
Она больше не будет работать по той же причинетвой пример не сделал.Потому что i
теперь переназначен новому объекту вместо прямой ссылки на объект в итерации.Обратите внимание на разницу в идентификаторе объекта.