Форум сайта python.su
0
Я не разбираюсь толком в цикле фор
>>>c=[12,3213,321313,41241,65363] >>> i=0 >>> for v in c: c[i]=v-12 i=i+0
[0, 3213, 321313, 41241, 65363]
[65351, 3213, 321313, 41241, 65363]
Отредактировано AlexSSpirit (Июнь 12, 2012 12:14:21)
Офлайн
173
Попробуйте в отдладчике прогнать пошагово, поймете ошибку. Если нет IDE, можно онлайн:
http://people.csail.mit.edu/pgbovine/python/tutor.html
Офлайн
0
У вас цикл работает в 5 итераций. В переменной “v” содержится ссылка на каждой новой итерации на каждый последующий элемент в списке “c”, но изменяется 5 раз только первый элемент “с” индексом 0,
т. к. “i” - всегда равно 0, поэтому последнее действие вообще не нужно.
Причем первый элемент списка всегда перезаписывается (изменяется ссылка) на разность элемента “v” и 12. Вывод: В первом элементе у вас будет 65363 - 12, а все остальные останутся без изменений
Офлайн
0
Ребят а это нормально, что я цикл фор уже 2дня безуспешно пытаюсь понять?
Я безнадёжен походу
Отредактировано AlexSSpirit (Июнь 12, 2012 13:26:58)
Офлайн
0
почитайте
Да… и если нужно было каждый элемент увеличить на 12, то лучше написать так:
>>> lst = [10, 20, 30, 40, 50, 60, 70] >>> for i, j in enumerate(lst): ... lst[i] += 12 ... >>> lst [22, 32, 42, 52, 62, 72, 82]
>>> for i in range(len(lst)): ... lst[i] += 12 ... >>> lst [22, 32, 42, 52, 62, 72, 82]
>>> lst = [10, 20, 30, 40, 50, 60, 70] >>> i = 0 >>> for v in lst: ... lst[i] +=12 ... i += 1 ... >>> lst [22, 32, 42, 52, 62, 72, 82]
map(lambda n: n + 12, lst)
>>> def enlarger(n): ... return n + 12 ... >>> map(enlarger, lst)
>>> [i + 12 for i in lst] [22, 32, 42, 52, 62, 72, 82]
Отредактировано Cryo (Июнь 12, 2012 14:35:25)
Офлайн
173
CryoМое понимание: это относится к конструкциям языка (elif, отсутствие do while, switch, unless, только # для комментариев и т.п.), и может быть, к API (работа с файлами, базами данных) и протоколам (dict, list, iterator, string, etc).
И вот как после этого понимать эту строку дзена?))
There should be one — and preferably only one — obvious way to do it.
Офлайн
52
CryoНет, лучше так не писать.
Да… и если нужно было каждый элемент увеличить на 12, то лучше написать так:>>> lst = [10, 20, 30, 40, 50, 60, 70] >>> for i, j in enumerate(lst): ... lst[i] += 12 ... >>> lst [22, 32, 42, 52, 62, 72, 82]
Отредактировано fata1ex (Июнь 12, 2012 19:54:02)
Офлайн
0
reclosedevок. Стал понимать)
Офлайн
0
fata1exПотому что в качестве индекса используется порядковый номер итерации, или потому что есть
Нет, лучше так не писать.
Офлайн
-2
Cryomap и list comprehension - это все функциональное программирование, т.е. особого противоречия нет.
Ну а лучше всего так:
map(lambda n: n + 12, lst)
Почти то же самое, что так:
>>> def enlarger(n):
… return n + 12
…
>>> map(enlarger, lst)
Но не тоже самое, как так:
>>>
И вот как после этого понимать эту строку дзена?))
There should be one — and preferably only one — obvious way to do it.
Офлайн