Python :: "IndexError: индекс индекса вне диапазона"

Я экспериментирую с несколькими элементами программирования python и пытаюсь создать массив каталитических чисел в этом процессе.

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

Функция вычисляет следующий элемент списка C с использованием текущего элемента, начиная с C [0] = 0.

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

from math import * C = [] C += [0] def ppC(n,C): # increment list C print( C[n] ) # list index out of range C += [ C[n]*(4*n+2)/(n+2) ] n += 1 ppC(n+1,C) # recursive ppC(0,C) # RUN 

3 Solutions collect form web for “Python :: "IndexError: индекс индекса вне диапазона"”

 n += 1 ppC(n+1,C) # recursive 

С этими двумя строками ваш второй вызов ppC будет иметь значение n из двух, которое находится за концом массива. Попробуйте только наращивать n один раз.

 from math import * C = [] C += [0] def ppC(n,C): # increment list C print( C[n] ) # list index out of range C += [ C[n]*(4*n+2)/(n+2) ] ppC(n+1,C) # recursive ppC(0,C) # RUN 

Вероятно, вы также должны иметь какую-то проверку, чтобы определить, когда вы должны прекратить генерировать числа, иначе функция будет работать вечно. (вернее, он будет работать тысячу раз и сбой с ошибкой «максимальная ошибка рекурсии»). Например:

 from math import * C = [] C += [1] def ppC(n,C): # increment list C print( C[n] ) # list index out of range C += [ C[n]*(4*n+2)/(n+2) ] if len(C) > 100: return ppC(n+1,C) # recursive ppC(0,C) # RUN 

Еще кое-что. Не первый каталонский номер один, а не ноль?

 from math import * C = [] C += [1] def ppC(n,C): # increment list C print( C[n] ) # list index out of range C += [ C[n]*(4*n+2)/(n+2) ] if len(C) > 10: return ppC(n+1,C) # recursive ppC(0,C) # RUN 

Результат:

 1 1 2 5 14 42 132 429 1430 4862 

Каталонские числа могут быть произведены полностью итеративно, поэтому вы можете сделать свою функцию в генераторе:

 def catalans(): C = 1 n = 0 while True: yield C C = 2 * (2 * n + 1) * C // (n + 2) n += 1 # then to get 100 first numbers in a list, you can do from itertools import islice print(list(islice(catalans(), 100))) # or print forever: for i in catalans(): print(i) 

Хорошо, похоже, что Кевин сказал правду – он ударяет по рекурсии и увеличивает второй раз до того, как массив будет расширен, чтобы учесть его. Кроме того, каталонское число C[0]=1 .

Вот мой полный (и теперь полностью функциональный) код:

 from math import * C = [] C += [1] def ppC(n,C): print( C[n] ) C += [ C[n]*(4.*n+2)/(n+2) ] if prompt(n) == 1: ppC(n+1,C) def prompt(n): if n%10 == 0: print("continue?") m = raw_input("(y/n)") if m != "y": return 0 else: return 1 else: return 1 ppC(0,C) # RUN 
  • Получение первого значения None из списка
  • Удалить все вхождения значения из списка?
  • Python - Итерирование по списку списка
  • Индексы списка Python должны быть целыми, а не кортежем "
  • Проверяйте, имеют ли списки какие-либо элементы в python
  • Как инициализировать список до определенного значения в Python
  • Автоматически растущие списки в Python
  • Инициализация списка на известное количество элементов в Python
  •  
    Interesting Posts for Van-Lav

    Python Scikit-learn Перцептронные возможности вывода

    Как я могу получить весь текст с сайта Scrapy?

    Отображать изображение в оттенках серого с использованием matplotlib

    Может ли программа Native Client (NaCl) записываться на языках, отличных от C или C ++?

    Shell Script: выполнить программу python из сценария оболочки

    flask-admin form: Constrain Значение поля 2 в зависимости от значения поля 1

    Уменьшите пару «ключ-значение» в пару из списка ключей с помощью Apache Spark

    Ошибка диаграммной диаграммы Django

    Получить фактическое дисковое пространство

    Как добавить URL-адрес пространства имен к представлению маршрутизатора django-rest-framework

    «Не разрешено взаимодействие с пользователем» При запуске AppleScript в python

    json.dumps vs flask.jsonify

    Получение PySide для работы с matplotlib

    Аранжировка букв самым выразительным способом?

    Расширенный срез, который начинается с начала последовательности с отрицательным шагом

    Python - лучший язык программирования в мире.