итерация списка индексов строк вне диапазона

#python #python-3.x

#python #python-3.x

Вопрос:

Я довольно новичок в python, я не уверен, как исправить строку индекса вне диапазона. это происходит сразу после цикла while, когда я хочу отправить mylist[i] [0] в функцию форматирования. Любой указатель на мой код в целом был бы потрясающим!

     def formatting(str1):

if str1 == '?':
    return True
else:
    return False

while(i <= len(mylist)):
    val = formatting(mylist[i][0])
    if val == True:
        str1 = mylist[i]
        str2 = mylist[i 1]
        i = i   2
        format_set(str1, str2)
    else:
        if format == True:
            if (margin   count   len(mylist[i])) <= width:
                if (i == (len(mylist)-1)):
                    list2.append(mylist[i])
                    print(" " * margin   " ".join(list2))   
                    break
            list2.append(mylist[i])
            count  = len(mylist[i])
            i  = 1                          
        else:
            print(" " * margin   " ".join(list2))
            list2 = []
            count = 0
    else:
        temp_margin = margin
        temp_width = width
        width = 60
        margin = 0
        if (margin   count   len(mylist[i])) <= width:
            if (i == (len(mylist)-1)):
                list2.append(mylist[i])
                print(" " * margin   " ".join(list2))
                margin = temp_margin
                width = temp_width
                break
            list2.append(mylist[i])
            count  = len(mylist[i])
            i  = 1                          
        else:
            print(" " * margin   " ".join(list2))
            list2 = []
            count = 0
 

Комментарии:

1. Используйте 4 пробела, чтобы ввести правильный отступ в ваш код. ВКЛАДКА здесь не работает.

Ответ №1:

изменить

 i <= len(mylist)
 

Для

 i < len(mylist)
 

Комментарии:

1. вам все равно придется иметь дело с mylist[i 1], о котором упоминал Абхи.

Ответ №2:

На последней итерации while цикла i ссылается на последнее значение. Следовательно,

 str2 = mylist[i 1]
 

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

РЕДАКТИРОВАТЬ: также, как упоминал Wcrousse, значение while (i <= len(...)) должно быть изменено на i < len(...) , поскольку индексы идут от 0 — (длина-1).

Комментарии:

1. Я получаю сообщение об ошибке в строке val = formatting(mylist[i][0]), у него нет возможности перейти к str2 = mylist[i 1]

2. Опубликуйте свое определение formatting() . Вероятно, он совершает ту же ошибку внутри.

3. Ответ Wcrousse был основной причиной вашей проблемы. Использование i <= len(mylist) приведет к тому, что последняя итерация i выйдет за пределы диапазона.

4. с изменением его на i < len(mylist) Я все еще получаю ошибку. для str2 = mylist[i 1], если он дойдет до этой точки, наверняка будет i 1