2014-11-30 4 views
0

Когда я представить следующий код:IndexError: индекс индекса вне диапазона Ошибка. (Python)

data = open("DNA Motif.txt", "r") 
lines = data.readlines() 
large = list(lines[0]) 
small = list(lines[1]) 
list = [] 
counts = [] 

print large 

for first in range(0, len(large)): 
    list = [] 
    if large[first] == small[0]: 
     for other in range(0, len(small)): 
      if small[other] == large[first + other]: 
       list.append(large[first + other]) 
      if list == small: 
       counts.append(str(first + 1)) 

со следующим набором данных:

TTGCGTTTCGCGTTTCTCCGTTGCGTTTCTAGCGTTTCCAGGCGACCGCGTTTCGCGTTTCAGCGTTTCGCGTTTCGCGTTTCGCGTTTCCCCGGGGGCGTTTCGCGTTTCGGCGTTTCCAGCGTTTCCGCGTTTCGCGTTTCGCGTTTCAGCATAGTTAGCGTTTCATCGCGTTTCGCGTTTCTTTTATGCTGTTGCGTTTCTGCTTAGGCGTTTCTACACTCAGCGTTTCGCGTTTCAGCGTTTCAGCGTTTCACAGCGTTTCGCGTTTCTGGCGTTTCGCCGCGTTTCCCGTGCGTTTCATTCTTGCGTTTCTGCGTTTCTCGAGAGCGTTTCGCGTTTCGTACGCGTTTCGCGTTTCTTAAGAGCGTTTCCGCGTTTCGTTACGCGTTGCAAGCGTTTCGGCGTTTCTCAGGCGTTTCGTGCGTTTCTGCGTTTCGCGTTTCTTTGCGTTTCGCGTTTCGAAAGCGTTTCGGTTGCCTACGTATATACTTGCGTTTCGCGTTTCCTTCTAAAGGCGTTTCATAGCGTTTCGCCCTGGAGCGTTTCCGGAGAGCGTTTCTGCGTTTCAGCGTTTCTGCGTTTCAGGAGCGTTTCGGTGAGATTTAGCGTTTCCTATCGGCGTTTCTGGCGTTTCCTCGAAAGCGTTTCAGGCGTTTCATGCGTTTCTGCGTTTCGCGTTTCTCCGGCGTTTCGGCGTTTCGGCGTTTCGCGTTTCAGCGTTTCCAGCGTTTCAAGCGGCGTTTCACGCGTTTCGCGTTTCGCGTTTCGCGTTTCACTGCGTTTCAAGCGTTTCGCGTTTCGCGTTTCAACGCTGCGTTTCAGCGTTTCGCGTTTCGCGTTTCTGACCCGCGTTTCAGCGTTTCTGGGATAGCGTTTCGTGCGTTTCGCGTTTCGCGGTGACGCGTTTC 
GCGTTTCGC 

Я получаю эту ошибку:

IndexError: list index out of range 

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

+0

** Где ** происходит ошибка? Что такое * полная * трассировка исключения? –

+0

И что, если 'first' установлен в' len (large) - 1' (поэтому последний доступный индекс в 'large')? Теперь вы пытаетесь добавить к этому 'other', и для любого значения, отличного от' 0' для 'other', это даст вам исключение. То же самое произойдет при любом значении, начинающемся с 'len (large) - len (small)', так как вам гарантируется генерация значений для 'other', которые будут превышать' len (large) - 1' при суммировании. Что вы на самом деле пытаетесь сделать здесь? –

+0

Ошибка возникает в строке 14: «если малый [другой] == большой [первый + другой]: ' –

ответ

0
for first in range(0, len(large)):      #1 
    list = [] 
    if large[first] == small[0]: 
     for other in range(0, len(small)):    #2 
      if small[other] == large[first + other]:  #3 
  1. Наибольшее значение first будет является len(large) - 1.

  2. Наибольшее значение other будет len(small) - 1.

  3. Таким образом, наибольшая ценность first + other будет len(large) + len(small) - 2.

Учитывая, что len(small) 9 из вашего примера ввода, first + other явно будет больше, чем len(large) в какой-то момент, и все же вы пытаетесь использовать его в качестве индекса для большой.

Вам необходимо исправить свою логику - или, как Martijn Pieters pointed out, используйте более простой метод.

Смежные вопросы