除非最后一个元素被删除,否则索引超出大型列表的范围

时间:2016-05-31 06:41:15

标签: python python-2.7

我遇到一个问题,我有一个从csv文件创建的相当大的嵌套列表(56k嵌套列表)。每个嵌套列表包含4个字符串。我试图找到嵌套列表,其中包含特定位置的特定字符串。

我一直收到一个IndexError,虽然我注意到如果我删除了最后一个嵌套列表,错误就会消失。

有人可以解释原因吗?

下面的代码和附加的jpg来说明

感谢您的帮助。

import csv

with open('c:\\users\\user\\desktop\\MeshTreeHierarchy.csv', 'rb') as f:

    reader = csv.reader((x.replace('\0', '') for x in f), delimiter='\t')
    # the line above addresses problem of null bytes in the csv file

    main_list = list(reader)

#    IndexError is not thrown if the del line below is made active
#    del main_list[-1:]

    chosen_list = [x for x in main_list if 'Hallux' in x[2]]

enter image description here

1 个答案:

答案 0 :(得分:0)

可能会抛出此错误,因为列表中的最后一个元素少于三个条目。

在这种情况下,[x for x in main_list if 'Hallux' in x[2]]将失败,因为x[2] 不存在。

您可以尝试这样的解决方法:

[x for x in main_list if 'Hallux' in (x[2] if len(x)>2 else [])]

但删除最后一行也是正确的,因为它似乎不属于其余数据