#python #loops #random-walk
#python #циклы #случайное блуждание
Вопрос:
Я выполняю упражнение на python и не могу его закончить. Мне нужно создать массив и заполнить его 25 числами, каждое число будет суммой предыдущего и значения, полученного из набора (-5, 5).
импорт numpy как np импорт random
def prog_list(mylist):
mylist = [0]
addlist = [-5,5]
sum_list = 0
for i in mylist:
if len(mylist) < 25:
sum_list = random.choice(addlist) mylist[i-1]
mylist.append(sum_list)
else:
return mylist
for x in prog_list(mylist):
print(x)
Когда я печатаю x, у меня
IndexError: list index out of range
Комментарии:
1. почему вы зацикливаетесь на моем списке, а не на i=0, в то время как i<25?
2. извините за мою ошибку, я собираюсь отредактировать 100 на 25
Ответ №1:
это работает:
def prog_list(n):
mylist = [0]
#addlist = [-5,5]
addlist = list(range(-5, 5 1))
for i in range(1, n):
_sum = random.choice(addlist) mylist[i-1]
mylist.append(_sum)
return mylist
prog_list(25)
если вы хотите извлечь любое целое число из (-5, 5), вам нужно это:
addlist = list(range(-5, 5 1))
существует еще более простой способ сделать это, когда вы не получаете доступ к списку на каждой итерации:
def prog_list(n):
mylist = []
_sum = 0
#addlist = [-5,5]
addlist = list(range(-5, 5 1))
for i in range(n):
mylist.append(_sum)
_sum = random.choice(addlist)
return mylist
prog_list(25)
Ответ №2:
for i in mylist:
if len(mylist) < 100:
sum_list = random.choice(addlist) mylist[i-1]
mylist.append(sum_list)
else:
return mylist
Эта конструкция получит значение элемента mylist
as i
. Первый элемент — это 0
то, что вы получаете один из {-5,5}
mylist[-1]
( [-1]
означает последний элемент на языке python), это приводит к либо -5
или 5
, затем вы получаете значение меньше 1, которое равно либо -6
или 4
, но элементов недостаточно для получения -6 (т. Е. 6 справа) или 4 (т.Е. 5 Слева) элемента, таким образом IndexError
. Чтобы избежать этого, вы можете заменить свое for
использование следующим while
while len(mylist) < 100:
sum_list = random.choice(addlist) mylist[-1]
mylist.append(sum_list)
return mylist
Ответ №3:
for i in mylist
перебирает элементы в вашем списке, поэтому на первом шаге, когда вы добавляете или вычитаете 5, вы будете пытаться получить доступ к (5-1)-му или (-5 — 1) -му элементу с помощью mylist[i — 1], и это даст вам ошибку IndexError .
Чтобы получить текущий последний элемент вашего mylist, вы должны использовать
mylist[-1] instead of mylist[i - 1]