Цикл упражнений случайного блуждания по Python

#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]