【问题标题】:IndexError: list index out of range Error. (Python) [duplicate]IndexError:列表索引超出范围错误。 (Python)[重复]
【发布时间】:2015-01-28 08:34:11
【问题描述】:

当我提交以下代码时:

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

如果您能提供帮助,那就太好了。我了解错误是什么,以及我应该如何修复它,但我不知道具体要在我的代码中修复什么。

【问题讨论】:

  • 在哪里出现错误?异常的完整回溯是什么?
  • 如果first 设置为len(large) - 1 会怎样(所以large 中的最后一个可用索引)?您现在尝试将other 添加到其中,对于other 之外的任何值,除了0,这会给您一个例外。从len(large) - len(small) 开始的任何值都会发生同样的情况,因为您可以保证生成的other 值在求和时将超过len(large) - 1。你到底想在这里做什么?
  • 第14行出现错误:'if small[other] == large[first + other]:'
  • @MartijnPieters 谢谢,我认为已经解决了。我试图找出在“大”中出现了多少次“小”

标签: python python-2.7


【解决方案1】:
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,使用更简单的方法。

【讨论】:

    猜你喜欢
    • 2018-04-22
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多