Регулировка строки в цикле for

1

Простой вопрос:

str = ['blah','blah']
for word in str:
    word = word * 2
print str

Это просто печатает ['blah', 'blah']. Почему (я знаю, как это сделать, просто интересно, почему это не разрешено)?

Теги:
string
list
for-loop
loops

4 ответа

1
Лучший ответ

Проблема в том, что вы создали новую строку, но не обновили ссылку в списке str. Это означает, что

word = word * 2

влияет на переменное слово, у которого есть новый адрес, и этот адрес (ссылка) не обновляется до списка str. для этого вам необходимо:

str[i] = str[i] * 2

или

word = word * 2
str[i] = word
  • 0
    Неизменность не имеет значения: если бы элементы были списками, проблема была бы такой же: присвоение имени не меняет старое значение имени
  • 0
    @Ned: Спасибо за исправление.
1

Когда вы назначаете имя новому значению, оно никогда не изменяет старое значение имени:

word = word * 2

Это принимает значение слова, удваивает его и делает его новым значением слова. Старое значение не изменяется.

0

В этом случае вы запрашиваете печать объекта массива. Цикл for ничего не делает для значений в массиве.

0

Потому что для этого нет стандартного средства для языка. То есть вам нужно, чтобы word был своего рода "указателем" на str[...], и в Python такой вещи нет. Кроме того, что, если str было генератором?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню