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

显示的错误如下:

python list中删除多个元素 list删除某个元素 python_python


将图中的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

正确的显示如下所示:

python list中删除多个元素 list删除某个元素 python_sed_02


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

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

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

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

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

python list中删除多个元素 list删除某个元素 python_sed_03

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

python list中删除多个元素 list删除某个元素 python_python_04

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