2016-12-21 9 views
-2

У меня есть список и хочу изменить ее элементыPython Looping по списку и назначая значения

list = ['apple','potato'] 

Теперь, в то время как это работает

for i in range(list): 
    list[i] = list[i].capitalize() 

это один не и я просто не» т получить почему

for i in list: 
    i = i.capitalize() 

Я новичок в Python, мой только фон C++, так что я все еще пытаюсь приспособиться к стилю Python. Если этот вопрос уже задан, пожалуйста, не стесняйтесь перенаправить меня и закрыть эту тему. Спасибо!

+5

Поскольку это не обновляет список. Изменяется только переменная i. –

+2

Когда вы перебираете цикл 'for', переменная' i' принимает _value_ каждого элемента в списке. Это не _reference_ для каждой точки в списке. Это отдельная переменная. Если вы переназначите его, вы будете влиять только на переменную 'i'. – khelwood

+0

Значит, это правильное значение? – user3002386

ответ

1

Назначение в цикле создаст новое имя i внутри for, которое теряет свое значение после каждой итерации.

На самом деле это не так. Вы можете есть эффект замеченным, если вы имели дело с изменяемых подструктур, которые могут быть изменены на месте, то есть:

l = [[1], [2]]  
for i in l: 
    i.append(2) 

изменения будут отражены соответственно (суб-список будет получить 2 прилагаемыми к их).

в вашем случае, однако, у вас есть str s, которые являются неизменяемыми объектами. i.capitalize(), действуя на экземпляр str, создаст новую копию значения, которое будет присвоено, а затем потеряно. Это не повлияет на объекты внутри списка.

Значение i в for i in container:действительно относится к объектам, содержащимся в последовательности. Когда вы назначаете i на результат i.capitalize(), имя i теперь будет ссылаться на новый возвращенный возвращенный экземпляр.

Не пытайтесь рисовать параллели между C++ и Python, я знаю, что это иногда облегчает обучение, но в другое время может привести вас в замешательство.

Обязательное примечание: не используйте list в качестве имени, оно маскирует встроенное имя list.

+1

Это может помочь: http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html# другие языки-иметь-переменные –

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

  • Нет связанных вопросов^_^