Errno 13尽管使用len()BIF,但列表索引超出范围

时间:2017-05-15 05:37:52

标签: python list indexing range

我正在编写代码来组织一些文本数据。在我的代码中,我需要检查一个字符串并删除其中包含该字符串的所有列表元素。以下是我的代码的一部分:

for i in range(0, len(split_data)): 
    if 'Vienna' in split_data[i]: #list index out of range
        del split_data[i]

我理解错误(列表索引超出范围)意味着我使用索引超出列表范围调用值。但是,我有点困惑,因为我使用了len(split_data),这显然是列表的长度。如果有人能给我一些指导或建议,我将不胜感激。 [我是新手程序员]

以下是split_data中数据的子集: split_data~ ['538980','33','OFFICER'S CHOICE“,'1402','BDA LIMITED','12,EVERGREE INUDSTRIAL ESTATE,SHANKTI MILLS LANE,MAHALAXMI,MUMBAI - 400 011.','反对',' ','申请日期:29/10/1990','用户日期:','商品/服务:含有威士忌,品牌,GIN,RUM,VODKA和葡萄酒的酒类,包括33类。']

2 个答案:

答案 0 :(得分:0)

循环遍历列表并删除元素

是一个坏主意

您可以使用list comprehension创建新列表

split_data = [x for x in split_data if 'Vienna' not in x]

或使用filter

split_data = list(filter(lambda x : 'Vienna' not in x, split_data))

答案 1 :(得分:0)

问题在于你给出的价值范围;在这里你要检查数组中的每个字符串,但是你在循环结束时进行了不必要的额外迭代,这导致程序给你一个错误。

Python引用从0开始的数组中的位置,并且假设您只想比较n个字符串,通过编写

for i in range(0, len(split_data)):

你正在进行n + 1次比较,这是不可能的。因此,只需减少在for循环中进行的比较次数,如下所示:

for i in range(0, len(split_data)-1):

希望有所帮助!