python列表删除会出现一个错误 list index out of range

Posted -dragon-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python列表删除会出现一个错误 list index out of range相关的知识,希望对你有一定的参考价值。

1,这是列表在删除的时候出现的一个问题,目的是为了删除列表中的0元素

# _*_ coding:utf-8 _*_
# __author__ = 'dragon'
P = [0, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 1, 0,
     44, 1, 0]
for i in range(0,len(P)-1):
    if(P[i] == 0):
        del P[i]
print P 

显示的错误如下:

将图中的del换成pop也会出现上面的问题

2.下面给出正确的解决代码如下

# _*_ coding:utf-8 _*_
# __author__ = 'dragon'
P = [0, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 1, 0,
     44, 1, 0]

for i in reversed(range(len(P))):
    if(P[i] == 0):
        del P[i]
print P

正确的显示如下所示:

这里如果将换成pop一样的可以得到正确的结果

3.原因分析:为什么会出现上面这种情况呢?

3.1 首先有一点要明确:列表不可随意乱删

3.2 要得到上面正确结果有多种方式,要是出现这种问题可以按2中正确解决

3.3 造成上面问题的一个原因就是列表的索引在删除之前是固定的,如果采用第一种方式range(5) 索引是按从小到大排列的

删除一个索引所对应的值后,python会自动吧删除的位置补上来,这样就会导致从删除位位置开始现在索引和原索引相差1个,导致出现上面的问题。如果是reversed (len(range(5))),这种索引是按从大到小的顺序排列,就相当于range(5-1,-1,-1)

这样在自动补充索引的时候就不会出现上面的情况。

以上是关于python列表删除会出现一个错误 list index out of range的主要内容,如果未能解决你的问题,请参考以下文章

python list 怎么查出一个元素的所有位置

python——循环删除list深拷贝和浅拷贝

python-2_数据结构_列表_字典_集合

python替换list元素,列表alist中有很多0数字,要替换成1

python删除list列表多个指定位置中的元素

从列表中删除所有出现的值?