Найти - Пользователи
Полная версия: Не могу понять почему выскакивает ошибка в 23 строке.
Начало » Python для новичков » Не могу понять почему выскакивает ошибка в 23 строке.
1
AlehinAlSerg
При попытке удалить вложенный список, найденный по значению, выдает ошибку: index out of range в 23 строке (if name == spisok
Не могу понять почему. Вроде все верно. Кто объяснит в чем проблема? Помогите разобраться пожалуйста.

# Список рекордов
x = None
spisok = [["вася", "100"], ["паша", "200"], ["ваня", "400"]]
while x != "0":
    print("""Список рекордов:
                0 - выход
                1 - добавить рекорд
                2 - удалить рекорд
    x = input("Сделайте свой выбор")
    if x == "0":
        print("Досвидания!")
    elif x == "1":  # добавляем новый рекорд
        name = input("введите имя")
        record = input("введите рекорд в виде числа")
        zapis = [name, record]
        spisok.append(zapis)
        print(spisok)
    elif x == "2":  # удаляем рекорд
        name = input("введите имя, чей рекорд хотите удалить, или сам рекорд")
        for i in range(len(spisok)):
            for k in range(len(spisok[i])):
               [size 32] if name == spisok[i][k]:[/size][size 32][/size]
                    print("нашел", i, k)
                    delate = [spisok[i][0], spisok[i][1]]
                    print(delate)
                    spisok.remove(delate)
                    print(spisok)
    else:
        x = None
AlehinAlSerg
Люди, отзовитесь!
JOHN_16
AlehinAlSerg
Люди, отзовитесь!
во первых не истерите, у меня постоянная прописка не на этом форуме, а в своей квартире, в которой я живу. Такая же ситуация и у других людей. Сюда заходят тогда когда есть на это время и желание.
Во вторых, вы посмотрите на свой пост. Ничего глаза не режет? вам подсветка синтаксиса уже говорит что в коде ошибка. Да еще и теги форума вставлены той самой строчке. НЕ НАДО так делать.

Теперь по сути, вот вам демонстрационный код (Python2, но суть такая же и для 3 ветки), делает то же что и ваш. Первая цифра означает индекс итерации цикла, вторая длину списка до удаления и третья после удаления.
>>> l = range(5)
>>> for i in xrange(len(l)):
...     print(i),
...     print(len(l)),
...     l.remove(l[i])
...     print(len(l)),
...     print
...
0 5 4
1 4 3
2 3 2
3 2
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
IndexError: list index out of range
Как видите та же самая ошибка. Длина списка по ходу цикла уменьшается и индексы начинают в какой то момент ссылаться на не существующий элемент.
Одно из типичных решений - это проходить список не от начала к концу, а наоборот. В вашем коде это будет примерно так:
 for i in range(len(spisok) - 1, -1, -1):
AlehinAlSerg
Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB