2 zc1307 zc1307 于 2017.01.03 16:34 提问

Python脚本 索引越界的问题

sort data

1: for d in sorted(biom['data'], key=itemgetter(2), reverse=True):
name = biom['rows'][d[0]]['id'] if opts.source != 'Subsystems' else biom['rows'][d[0]]['metadata']['ontology'][-1]
if len(top_ann) >= opts.top:
break
if sub_ann and (name not in sub_ann):
continue
top_ann[name] = d[2]

# output data
for k, v in sorted(top_ann.items(), key=itemgetter(1), reverse=True):
    safe_print("%s\t%d\n" %(k, v))

return 0

2:if name == "__main__":
sys.exit( main(sys.argv) )

    提示两处错误,1,2。 for d in sorted(biom['data'], key=itemgetter(2), reverse=True):

IndexError: list index out of range

1个回答

u010136832
u010136832   2017.01.04 09:40

我把你的代码稍微的重新整理了一下,下次注意对齐和缩进(CSDN如果要插入代码的话,注意文本框上面的尖括号,点击会出现双引号,把代码
贴在双引号中就可以保证对齐和缩进了)

 for d in sorted(biom['data'], key=itemgetter(2), reverse=True):
    name = biom['rows'][d[0]]['id'] if opts.source != 'Subsystems' else biom['rows'][d[0]]['metadata']['ontology'][-1]
    if len(top_ann) >= opts.top:
        break
    if sub_ann and (name not in sub_ann):
        continue
    top_ann[name] = d[2]
    # output data
    for k, v in sorted(top_ann.items(), key=itemgetter(1), reverse=True):
        safe_print("%s\t%d\n" %(k, v))

return 0
if name == "__main__":
sys.exit( main(sys.argv) )
    提示两处错误,1,2。 for d in sorted(biom['data'], key=itemgetter(2), reverse=True):
IndexError: list index out of range

另外从提供的错误来看,我初步判定是你的biom['date']中根本就没有2这个域,所以才导致会越界。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
动态数组索引越界问题
1、在C++中,可以采用几种不同的方法创建一个某种类型T的对象的数组。3种常用的方法如下: #define N 10 //数组的长度N在编译时已知 T static_array[10]; int n = 20; //数组的长度n是在运行时计算的 T* dynamic_array = new T[n]; std::vector vector_array; //数组的长度可以在运
多维数组的索引越界问题
1、我们大都知道可以使用vector或array模板作为线性数组的实现,那么对于需要二维矩阵、三维数组(或者N维数组)时应该怎么解决。 由于N维数组的基本情况中的所有问题都可以用一个二维矩阵举例说明,因此以下的讨论仅限于此,并简单的称为矩阵。 如果矩阵的大小在编译时是已知的,可以很方便的把它实现为数组的数组,这个很简单。这里,我们主要把注意力集中在当矩阵的大小是在运行时计算产生,对于这种复杂的
java 索引越界异常(IndexOutOfBoundsException)
java 索引越界异常(IndexOutOfBoundsException) java 索引越界异常(IndexOutOfBoundsException)
python中列表删除并遍历遇到的问题——越界!
list3 = [1, 2, 3, 4, 5, 6, 7, 8] # [2, 3, 4, 5, 6, 7, 8] # [2, 4, 5, 6, 7, 8] for i in range(0, len(list3)): if list3[i] < 5: list3.pop(i) print(list3) 首先判断1<5,将1删除,之...
字符串处理,注意越界问题
strcpy(char *dest, char *src);注意越界问题 dest(空间大小) > src(串的长度)  没有问题 dest == src               不是字符串,且产生了越界 dest strncpy(char *dest, char *src, int n);注意越界问题与字符串问题 dest(指向空间大小) > n   则结果dest是一个字符
java 字符串索引越界异常(StringIndexOutBounds)
java 字符串索引越界异常(StringIndexOutBounds) java 字符串索引越界异常(StringIndexOutBounds)
字符串索引越界
先贴出测试代码: public class TestStringIndex { public static void main(String[] args) { String test="woshifoucengjilaiguo"; System.out.println(test.length()); char i=test.charAt(21); System.ou
Java 异常 越界问题
转自:http://blog.sina.com.cn/s/blog_8250c39a0101k4w7.html越界问题一般来说都是数组问题。数组下标不对称。 1.java.lang.ArrayIndexOutOfBoundsException是运行时异常, 编译器是不会知道的,只有运行时jvm才能捕获到.2.jvm为何能捕获到,数组在运行时是由jvm创建的一个东西,是用机器指令创建的。。。 类似于
C#报错之索引越界
使用语言:C#环境:.net core (其他的环境也一样)Unhandled Exception: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.Unhandled Exception: System...
静态数组的索引越界问题
1、静态数组 处理静态数组: #define N 10 //数组的长度N在编译时已知 T static_array[N];这里,数组的长度在编译时是已知的并且不会改变。当然,为了使用具有边界检查的安全数组,也可以vector模板,并在一个构造函数中指定它的长度: scpp::vector vect(N);它的效果与静态数组完全相同,但问题在于效率。静态数组是在堆栈上分配内存,而vec