Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 17, 2012 00:17:30

jam
От:
Зарегистрирован: 2012-01-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Две строчки list.append() в цикле for

Сначала надумал отрастить списку хвост:

listt = [1, 2, 3]
for elem in listt:
if len(listt) < 20: # ограничение во избежание бесконечного цикла
listt.append(elem)
print listt
>>> [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2] # как и ожидал, получил повторение списка
Потом решил в промежутки что-нибудь добавить и просто дописал ещё одну строчку с append(). Для наглядности оставил только один элемент списка:
listt = [1]
for elem in listt:
if len(listt) < 50: # удлинил получающийся список
listt.append(elem)
listt.append('*')
print listt
>>> [1, 1, '*', 1, '*', '*', '*', 1, '*', '*', '*', '*', '*', '*', '*', 1, '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', 1, '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*']
Ожидал, что будет добавляться по одному знаку после прохода списка, но не был уверен. Однако такого точно не ожидал…
Число звёздочек между единицами возрастает очень красиво:
1
3
7
15
31
63
127
255
511
1023

Как так? Где что читать?



Отредактировано (Янв. 17, 2012 00:21:48)

Офлайн

#2 Янв. 17, 2012 04:39:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Две строчки list.append() в цикле for

1.

>>> l=[1,2,3]
>>> l*=10
>>> l
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]



Офлайн

#3 Янв. 17, 2012 04:52:32

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Две строчки list.append() в цикле for

2.

>>> l=[1,2,3]
>>> l+="*"
>>> l
[1, 2, 3, '*']
>>> l*=10
>>> l
[1, 2, 3, '*', 1, 2, 3, '*', 1, 2, 3, '*', 1, 2, 3, '*', 1, 2, 3, '*', 1, 2, 3, '*', 1, 2, 3, '*', 1, 2, 3, '*', 1, 2, 3, '*', 1, 2, 3, '*']



Офлайн

#4 Янв. 17, 2012 06:52:16

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Две строчки list.append() в цикле for

jam
Как так? Где что читать?
Что значит “что читать?”? Читать нужно свой код, в которм вы запрограммировали такой алгоритм. Пройдитесь по нему отладчиком.



Офлайн

#5 Янв. 17, 2012 08:02:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Две строчки list.append() в цикле for

jam
Ожидал, что будет добавляться по одному знаку после прохода списка, но не был уверен. Однако такого точно не ожидал…
http://docs.python.org/reference/compound_stmts.html#the-for-statement



Отредактировано (Янв. 17, 2012 08:03:28)

Офлайн

#6 Янв. 17, 2012 16:02:44

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Две строчки list.append() в цикле for

jam
Ожидал, что будет добавляться по одному знаку после прохода списка, но не был уверен. Однако такого точно не ожидал…
После первой итерации listt =
После второй итерации listt =
После третьей итерации istt = , потому что elem = ‘*’
Ну и так далее, 4й elem опять равен ‘1’.
Читаем Кнута и думаем.



Отредактировано (Янв. 17, 2012 16:28:14)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version