Python remove()使用过程中出现的问题

结论

remove()函数没有返回值。以b = a.remove(‘xxx’)形式使用时,a.remove(‘xxx’)没有返回值,所以b为None。

排查过程

这个问题最开始是由于把文本strip().split(’ ‘)后产生的列表中含有空项引起的,形式是[…,’',…],为了把这个去掉,尝试用捕获异常来处理(有些样本不会产生这样的现象),但在打印结果的过程中发现,打印出None,所以才发现这个问题。
复现情况如下:

a_list = [['a','b','c'],['a','c','d','','e']]
for a in a_list:
    print(a)
    try:
        a = a.remove('')
    except ValueError:
        a = a
    print(a)
print('*'*20)
b = ['a','c','d','','e']
b.remove('')
#print(b)
print(b)

对应运行结果:
['a', 'b', 'c']
['a', 'b', 'c']
['a', 'c', 'd', '', 'e']
None
********************
['a', 'c', 'd', 'e']

之后,做了一系列测试,

测试一:
a_list = [['a','b','c'],['a','c','d','','e']]
for a in a_list:
    print(a)
    try:
        a.remove('')
    except ValueError:
        a = a
    print(a)
print('*'*20)
b = ['a','c','d','','e']
b.remove('')
#print(b)
print(b)

对应运行结果:
['a', 'b', 'c']
['a', 'b', 'c']
['a', 'c', 'd', '', 'e']
['a', 'c', 'd', 'e']
********************
['a', 'c', 'd', 'e']

测试二:
b = ['a','c','d','','e']
b.remove('')
print(b)
b = b
print(b)
对应运行结果:
['a', 'c', 'd', 'e']
['a', 'c', 'd', 'e']

测试三:
b = ['a','c','d','','e']
b = b.remove('')
print(b)
b = b
print(b)
对应运行结果:
None
None

然后,查了一些资料,有说明remove()函数用于移除列表中某个值的第一个匹配项,并做了其他的一些测试(地址)

a=[1,2,3,4,5]
for i in a:
    if i != 2:
        a.remove(i)
print(a)

结果:
[2,4]

分析:emove方法用于移除列表中某个值的第一个匹配,这个没错。但是在上述例子中,第一次循环时,i=1,因此移除1,此时list为:[2,3,4,5]
此时索引为0的元素已经变成了2,而不再是1,而循环会从索引为1的元素开始,此时 i=3,然后根据 if 的判断,3会被remove掉,元素 4 的索引位置再往前变为2,循环再次开启,从索引为 3 的地方开始,即 5,再remove掉,故此最后遗留下来的list是:[2, 4]
特别注意:True 和 1 是等同的,False 和 0 是等同的,甚至 True 和 False 也可以进行算术运算。我们在操作元素时,要特别小心!

最后,发现remove函数并没有返回值,所以会为None

你可能感兴趣的:(Python,python,开发语言)