2016-07-31 3 views
0

У меня возникли проблемы с редактированием элементов в списке в Python, у меня есть следующий код:Python: Элементы в списке не меняются?

mylist = ["one", "day", "soon"] 
for x in mylist: 
    x = "New word" 
    print(x) 

print(mylist) 

Я бы ожидать, что выход будет «новое слово» в три раза (один раз для каждой итерации) а затем список [ «Новое слово», «Новое слово», «Новое слово»], но вместо этого я получаю:

Новое слово
Новое слово
Новое слово
[ «один» , «день», «скоро»]

Вопрос: Почему список, по-видимому, меняется, но затем возвращается к исходной форме при печати в виде всего списка?

Примечание: Я исправили проблему с помощью следующего кода, но я до сих пор интересно, почему оригинальный метод не

mylist2 = ["a", "b", "c"] 
for x in mylist2 : 
    mylist2[mylist2.index(x)] = "Woo" 

print(mylist2) 
+0

Подумайте, что 'x' является передачей по значению' mylist2'. – intboolstring

+0

@intboolstring Я не совсем уверен, что точно знаю, что вы имеете в виду? Я просто собираю программирование снова после долгого перерыва, что вы подразумеваете под поваром? – Plopern

+0

Я сейчас на мобильном телефоне, поэтому я не могу набрать слишком много. Google pass-by-value vs. pass по ссылке – intboolstring

ответ

2

Проблема заключается в том, что когда вы итерацию с for x in mylist, а затем присвоить значение x, вы создаете новую переменную под названием x, и это то, что вы печатаете. Вы не можете изменить список таким образом, только путем итерации следующим образом:

for i in range(len(mylist)): 
    mylist[i] = "New word" 
+0

Отлично, лучше, чем мое решение и хорошо объяснил, спасибо! – Plopern

Смежные вопросы