Индекс списка Python вне диапазона, но не должен - PullRequest
0 голосов
/ 27 июня 2018

startDate, stopDate, startTime, stopTime, startBehavior и stopBehavior - все списки одинаковой длины. Я получаю индекс списка вне диапазона в строке 5 (если startDate [i]! = StopDate [j]), и я не уверен, почему. Раньше это работало, а сейчас нет. Я пытаюсь напечатать конкретное поведение на основе условий в операторах if / elif.

i = 0
while (i < len(startDate)):
    j = 0
    while (j < len(stopDate)):
        if startDate[i] != stopDate[j]:
            j += 1
        elif startDate[i] == stopDate[j]:
            if stopTime[j] < startTime[i]:
                j += 1
            elif stopTime[j] > startTime[i]:
                if startBehavior[i] != stopBehavior[j]:
                    j += 1
                elif startBehavior[i] == stopBehavior[j]:
                    print(startBehavior[i])
                    print(stopBehavior[j])
                    print('')
                    i += 1

любая помощь будет оценена! заранее спасибо!

1 Ответ

0 голосов
/ 27 июня 2018

Если вы запустите следующий фрагмент, он будет работать вечно, даже если я явно больше 100.

i = 0
while i < 100:
    while True:
        i += 1
        print(i)

Ваш код делает нечто похожее - в случае, если i == len(startDate) - 1; startDate[i] == stopDate[j]; stopTime[j] > startTime[i]; и startBehavior[i] == stopBehavior[j], ваш код будет увеличивать i так, чтобы i == len(startDate), а затем, поскольку j < len(stopDate) по-прежнему True, вы не выйдете из своего второго цикла while. Когда вы попытаетесь получить доступ к startDate[i], вы получите IndexError.

Это в некоторой степени зависит от данных, поэтому вполне возможно, что оно работало раньше, не сталкиваясь с этой проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...