Python 索引器:列表索引超出范围,但程序正在运行

Python 索引器:列表索引超出范围,但程序正在运行,python,Python,我需要改变DNA中的一个核苷酸。所以我想把DA换成DG。我写了下面的程序。程序部分工作,但出现以下错误: Traceback (most recent call last): File "DNA.py", line 18, in <module> if NUM != line.split()[5]: IndexError: list index out of range 如果你能让我知道,我会很高兴的。 谢谢错误正告诉您问题所在:列表索引超出范围 这意味着此行中的5太大

我需要改变DNA中的一个核苷酸。所以我想把DA换成DG。我写了下面的程序。程序部分工作,但出现以下错误:

Traceback (most recent call last):
  File "DNA.py", line 18, in <module>
    if NUM != line.split()[5]:
IndexError: list index out of range
如果你能让我知道,我会很高兴的。
谢谢

错误正告诉您问题所在:列表索引超出范围

这意味着此行中的
5
太大:
if NUM!=line.split()[5]

您应该在单独的行上进行拆分,保存结果,然后仅在结果实际包含那么多元素时使用第5个元素。例如:

for line in lines:
    words = line.split()
    if len(words) >= 6 and NUM != words[5]:
      OT.writelines(line)
如果您认为数据是正确的,那么您应该通过在循环中放入print语句来验证您的假设,这样您就可以看到每次迭代的
line
。如果数据是正确的,你肯定不会得到你所说的错误。唯一可能的解释是数据不是您所期望的


1事实并非如此。如果
是自定义对象的列表,并且每个对象都有一个自定义的
split
方法返回不同的内容,则可能会出现错误。这种情况极不可能发生

错误会准确地告诉您问题所在:列表索引超出范围

>>> str1= "1 2 3 4 5 6"
>>> str2= "1 2 3 4 5"
>>> print str1.split()[5]
6
>>> print str2.split()[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
这意味着此行中的
5
太大:
if NUM!=line.split()[5]

您应该在单独的行上进行拆分,保存结果,然后仅在结果实际包含那么多元素时使用第5个元素。例如:

for line in lines:
    words = line.split()
    if len(words) >= 6 and NUM != words[5]:
      OT.writelines(line)
如果您认为数据是正确的,那么您应该通过在循环中放入print语句来验证您的假设,这样您就可以看到每次迭代的
line
。如果数据是正确的,你肯定不会得到你所说的错误。唯一可能的解释是数据不是您所期望的


1事实并非如此。如果
是自定义对象的列表,并且每个对象都有一个自定义的
split
方法返回不同的内容,则可能会出现错误。这种情况极不可能发生

错误会准确地告诉您问题所在:列表索引超出范围

>>> str1= "1 2 3 4 5 6"
>>> str2= "1 2 3 4 5"
>>> print str1.split()[5]
6
>>> print str2.split()[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
这意味着此行中的
5
太大:
if NUM!=line.split()[5]

您应该在单独的行上进行拆分,保存结果,然后仅在结果实际包含那么多元素时使用第5个元素。例如:

for line in lines:
    words = line.split()
    if len(words) >= 6 and NUM != words[5]:
      OT.writelines(line)
如果您认为数据是正确的,那么您应该通过在循环中放入print语句来验证您的假设,这样您就可以看到每次迭代的
line
。如果数据是正确的,你肯定不会得到你所说的错误。唯一可能的解释是数据不是您所期望的


1事实并非如此。如果
是自定义对象的列表,并且每个对象都有一个自定义的
split
方法返回不同的内容,则可能会出现错误。这种情况极不可能发生

错误会准确地告诉您问题所在:列表索引超出范围

>>> str1= "1 2 3 4 5 6"
>>> str2= "1 2 3 4 5"
>>> print str1.split()[5]
6
>>> print str2.split()[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
这意味着此行中的
5
太大:
if NUM!=line.split()[5]

您应该在单独的行上进行拆分,保存结果,然后仅在结果实际包含那么多元素时使用第5个元素。例如:

for line in lines:
    words = line.split()
    if len(words) >= 6 and NUM != words[5]:
      OT.writelines(line)
如果您认为数据是正确的,那么您应该通过在循环中放入print语句来验证您的假设,这样您就可以看到每次迭代的
line
。如果数据是正确的,你肯定不会得到你所说的错误。唯一可能的解释是数据不是您所期望的



1事实并非如此。如果
是自定义对象的列表,并且每个对象都有一个自定义的
split
方法返回不同的内容,则可能会出现错误。这种情况极不可能发生

打印len(line.split())“我编写了以下程序”。好的,让我们看看。如果你发布更多的代码会更好。你给我们的代码对打印len(line.split())“我编写了以下程序”没有真正的帮助。好的,让我们看看。如果你发布更多的代码会更好。你给我们的代码对打印len(line.split())“我编写了以下程序”没有真正的帮助。好的,让我们看看。如果你发布更多的代码会更好。你给我们的代码对打印len(line.split())“我编写了以下程序”没有真正的帮助。好的,让我们看看。如果你发布更多的代码会更好。你给我们的代码没有真正的帮助,谢谢。该行有11列。所以我确信它有10个索引。line.split()本身工作正常,但当我将其更改为“NUM!=line.split()[5]”时,它会出错。这就是我困惑的原因!!!您是假设该行有11列,还是绝对确定
line
有11列?也许你有一个空行。如果行确实包含您所说的数据,Python不会抛出错误,因此唯一的解释是数据不是您所认为的数据。不,我没有。这句话是这样的:“ATOM 8 N SER X 2 41.940 59.452 98.178 0.00 0.00”@MortezaKhabiri:恕我直言,这是不可能的。如果
中的数据是您所说的数据,则拆分将返回11项,您绝对不会得到您所说的错误。您应该在循环中放入一个print语句来打印每一行。我想你会发现有一行是空白的,或者比你想象的要短。非常感谢你的时间和回复。其实你是对的。这似乎不符合逻辑,这就是我感到困惑的原因。我想我发现了问题所在。我终于有了一句废话,这就是为什么我会出错的原因。谢谢。该行有11列。所以我确信它有10个索引。line.split()本身运行良好,但当我将其更改为“时”
>>> str1= "1 2 3 4 5 6"
>>> str2= "1 2 3 4 5"
>>> print str1.split()[5]
6
>>> print str2.split()[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range