Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 28, 2011 19:37:57

eiyawii
От:
Зарегистрирован: 2011-08-04
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

создание и заполнение списка

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

def fa(x):
if x==0 or x==1:
return 1
else:
return fa(x-1)*x

s=[0,0,0,0,0]
q=0
while q<5:
s[q]=fa(q)
q+=1
print s
соответственно после функции фа(х) выполняется создание и заполнение списка. если я создаю пустой список в цикле вычисления факториалов и добавляю в пустой список значение факториала на каждом шаге (s+=fa(x)), то соответственно выдаё ошибку что объект не итерабле.



Офлайн

#2 Окт. 28, 2011 19:45:33

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

создание и заполнение списка

def fa(x):
if x == 0 or x == 1:
return 1
else:
return fa(x-1)*x

s = []
q = 0
while q<5:
s.append(fa(q))
q += 1
print s
Но как у Вас тоже работает



Отредактировано (Окт. 28, 2011 19:52:00)

Офлайн

#3 Окт. 28, 2011 21:09:00

eiyawii
От:
Зарегистрирован: 2011-08-04
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

создание и заполнение списка

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



Офлайн

#4 Окт. 29, 2011 01:24:16

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

создание и заполнение списка

Так пойдет?

def fa(x):
return int(x < 1) or fa(x-1)*x
print map(fa, range(5))



Офлайн

#5 Окт. 29, 2011 08:54:22

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

создание и заполнение списка

Чтобы получить список и при этом еще не вычислять факториалы одних и тех же чисел кучу раз, можно сделать генератор (в частности, рекурсивный):

def fa(x):
if x == 0: yield 1
else:
for k in fa(x-1): yield k
yield x*k

print( list(fa(5)) )
# или формируем список руками
s = [k for k in fa(5)] # то же, что и s = list( fa(5) )



Отредактировано (Окт. 29, 2011 09:10:50)

Офлайн

#6 Окт. 29, 2011 22:59:02

eiyawii
От:
Зарегистрирован: 2011-08-04
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

создание и заполнение списка

спасибо за советы)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version