Почему я получаю сообщение об ошибке индекса списка, если в списке есть элементы с определенным индексом? - PullRequest
0 голосов
/ 29 ноября 2018

Я работаю над некоторыми проблемами практики Code Signal в Python 2, и я часто сталкиваюсь с той же ошибкой.Как говорится в заголовке вопроса, я не могу получить доступ к конкретному элементу списка, хотя я уверен, что он существует.Когда я пытаюсь запустить код, показанный ниже, я получаю эту ошибку, IndexError: list index вне диапазона.Ниже показан код, с которым я работаю.Любая помощь приветствуется, я уверен, что это простое недопонимание того, как работает Python2.В этом примере s = "adobecodebanc" и t не имеет отношения к моему вопросу

    def minSubstringWithAllChars(s, t):
        nuS = str(s)
        listS = list(nuS)

        for i in range(len(listS)):
            print i
            print listS[i]

        print listS[0]

Когда я опускаю последнюю строку кода, я могу напечатать все символы в S - как показано ниже,Однако, когда я добавляю последнюю строку, я не могу напечатать что-либо, поскольку я получаю ошибку индексации.

    0
    a
    1
    d
    2
    o
    3
    b
    4
    e
    5
    c
    6
    o
    7
    d
    8
    e
    9
    b
    10
    a
    11
    n
    12
    c

С чем это может быть связано?Вот текст моего сообщения об ошибке

          Traceback (most recent call last):
            file.py on line ?, in getUserOutputs
              userOutput = _runjodsn(testInputs[i])
            file.py on line ?, in _runjodsn
              return minSubstringWithAllChars(*_fArgs_nycavblqytqu)
            file.py on line 9, in minSubstringWithAllChars
              print listS[0]
          IndexError: list index out of range

1 Ответ

0 голосов
/ 29 ноября 2018

Возможно, у вас возникла странная проблема с вашим компилятором Python вашего провайдера или, возможно, поскольку это страница с веб-приложением для тестирования, запуска и проверки упражнений Python, ваш код работает не совсем так, как вы видите его в Интернетеpage.

Это может быть заметно, если вы сравните свой код со стековой трассировкой, которая имеет дополнительные вызовы, и даже аргументы для вашей функции не кажутся стандартными формальными аргументами, но * args (неаргумент переменной длины ключевого слова) аргумент.

трассировка стека для IndexError для вашего кода (например, если бы строковый аргумент был пустым, был бы):

Traceback (most recent call last):
  File "main.py", line 11, in <module> 
    minSubstringWithAllChars("abe", "") 
  File "main.py", line 9, in minSubstringWithAllChars 
    print listS[0] 
IndexError: list index out of range

В любом случае, работает с python 2.7.13 ясно показывает отсутствие проблем с вашим кодом:

def minSubstringWithAllChars(s):
    nuS = str(s)
    listS = list(nuS)
    print("working with string: " + nuS)
    print("Len of s: " + str(len(nuS)))
    print("Len of listS: " + str(len(listS)))
    print("\n")

    for i in range(len(listS)):
        print("Checking position: " + str(i) + " of String (" + nuS + "): " + listS[i])

    print("\nAdditional access to listS via index 0: ")
    print listS[0]

print("Start\n")
minSubstringWithAllChars("adobecodebanc")
print("\nEnd")

Вы можете видеть, что это работает:

Start

working with string: adobecodebanc
Len of s: 13
Len of listS: 13


Checking position: 0 of String (adobecodebanc): a
Checking position: 1 of String (adobecodebanc): d
Checking position: 2 of String (adobecodebanc): o
Checking position: 3 of String (adobecodebanc): b
Checking position: 4 of String (adobecodebanc): e
Checking position: 5 of String (adobecodebanc): c
Checking position: 6 of String (adobecodebanc): o
Checking position: 7 of String (adobecodebanc): d
Checking position: 8 of String (adobecodebanc): e
Checking position: 9 of String (adobecodebanc): b
Checking position: 10 of String (adobecodebanc): a
Checking position: 11 of String (adobecodebanc): n
Checking position: 12 of String (adobecodebanc): c

Additional access to listS via index 0: 
a

End

Другое дело, что вам не нужно использовать индексы для итерации вашей строкисимволы (или разбить вашу строку на массив символов с помощью list ()).Вы можете просто ярлык с этим:

for i in nuS:
    print i
...