首页 > 编程语言 > 详细

问题记录:列表中有None值时进行排序会报错问题解决,以及list.remove方法删除列表中连续None值时的缺点解析

时间:2021-07-30 08:55:37      阅读:23      评论:0      收藏:0      [点我收藏+]

python报错 TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘NoneType‘

问题分析:str类型不能和none类型进行比较
心路历程:

ff = [None, ‘1627569105475‘, ‘DcSlF72m8adwgpXi‘, None,None, None]
    n= 0
    ff.sort()
    print(ff

技术分享图片

对列表进行排序时,如果列表有None会上述错误

list.remove()方法删除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换成其他的值也是一样有这个问题,这里记录下

删除列表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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!