原文地址:http://blog.csdn.net/yywan1314520/article/details/50342889
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)
这样在自动补充索引的时候就不会出现上面的情况。