问题分析:str类型不能和none类型进行比较
心路历程:
ff = [None, ‘1627569105475‘, ‘DcSlF72m8adwgpXi‘, None,None, None]
n= 0
ff.sort()
print(ff
对列表进行排序时,如果列表有None会上述错误
开始我用的是列表删除的方法,然后发现没有None值没有删完,为了分析具体过程,就深入研究了下,如:
ff = [None, ‘1627569105475‘, ‘DcSlF72m8adwgpXi‘, None,None, None]
n= 0
for i in ff:
if i is None:
ff.remove(i)
print(ff)
此时发现还是有None值,很好奇为什么没有把None值删完,为了定位是哪一个索引没有删完,就写出来看看
ff = [None, ‘1627569105475‘, ‘DcSlF72m8adwgpXi‘, None,None, None]
n= 0
for k,v in enumerate(ff):
if v is None:
print(k)
ff.remove(v)
print(ff)
上述这个能debug分析具体过程,只做了三次删除None值操作,第一次删除的索引值为0,即第一个值,此时列表ff=[ ‘1627569105475‘, ‘DcSlF72m8adwgpXi‘, None,None, None],继续for循环,此时删除索引值为2,即第三个值,此时列表ff=ff=[ ‘1627569105475‘, ‘DcSlF72m8adwgpXi‘,None, None],继续循环,删除索引值为2,然后这里就出问题了,由于之前删除过索引为2的,这里就不会删除对应值,而是继续往下,把索引为3的值给删除掉了,emmm所以不建议用list.remove,或者pop删除列表值,从而获取真正想要的列表,因为每次删除值后,列表都是动态变化的,这里把None换成其他的值也是一样有这个问题,这里记录下
方法1:
列表添加元素方式,期望值放在新列表里,然后在进行sort排序
ff = [None, ‘1627569105475‘, ‘DcSlF72m8adwgpXi‘, None,None, None]
ll = []
for i in ff:
if i is not None:
ll.append(i)
print(ll)
方法2:
filter过滤器
ff = [None, ‘1627569105475‘, ‘DcSlF72m8adwgpXi‘, None,None, None]
res = list(filter(None, ff))
print(res)
这样写个人觉得更香,能精简就精简,体现python的简洁优雅,然后再用sort排序就行了
总结:这个问题解决其实很简单,就是list.remove困扰了我,花了半个小时研究它,后面建议遇到列表取值不要用remove,直接用这两种方法就行
实践:
我想过滤None值和‘null‘值,仅供参考,还是要根据个人需求来定
问题记录:列表中有None值时进行排序会报错问题解决,以及list.remove方法删除列表中连续None值时的缺点解析
原文:https://www.cnblogs.com/happy-winds/p/15077723.html