问题:for循环居然不能删除列表中所有指定值

  1. n9 = ['1', '', '3', '', '', '6', '', '', '']
  2. for i in n9:
  3. if i == '':
  4. n9.remove(i)
  5. print("数组长度在Remove后-1:", len(n9))
  6. print(n9)

输出结果

  1. 数组长度在Remove后-1 9
  2. 数组长度在Remove后-1 8
  3. 数组长度在Remove后-1 7
  4. 数组长度在Remove后-1 7
  5. 数组长度在Remove后-1 6
  6. 数组长度在Remove后-1 5
  7. ['1', '3', '6', '', '']

image.png

原因

for的计数器是依次递增的,直接对列表进行remove(等处理)后,列表的内容和元素个数已被更改
删除后会导致遍历重复的值,并且实际个数比预期个数-1。

解决方案

不对列表直接进行修改,赋值给新的变量储存。

  1. n9 = ['1', '', '3', '', '', '6', '', '1', '1', '1', '', '', '6', '', '']
  2. filtered = []
  3. for i in n9:
  4. if i == "":
  5. # print("仅过滤空元素")
  6. pass
  7. else:
  8. filtered.append(i)
  9. print(filtered)

输出结果

image.png

加强版

通过列表过滤/删除多个指定字符串:

  1. listWithNull = ['1', '', '3', '', '', '6', '', '1', '1', '1', '', '', '6', '', '']
  2. list2Filter = ["", "1"]
  3. listFiltered = []
  4. for i in listWithNull:
  5. if i in list2Filter:
  6. # print("通过list过滤多个元素")
  7. pass
  8. else:
  9. listFiltered.append(i)
  10. print(listFiltered)

过滤空元素“”和“1”时:
image.png

23.02.15

背景

有需要遍历处理的列表数据,嵌套着一个list(比如[“字段1”,“字段2”,“字段3”])。

  1. list_Level1 = ["Level1_0" , "Level1_1" , "Level1_2"]
  2. list_Level2 = ["Level2_0" , "Level2_1" , "Level2_2"]

错误的原始代码

  1. for iL1 in list_Level1:
  2. print( "\n" + iL1 )
  3. for iL2 in list_Level2:
  4. print( iL2 )
  5. list_Level2.remove( iL2 )

结果

image.png