加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

测试元组是否仅包含Python的None值

发布时间:2020-12-20 13:04:09 所属栏目:Python 来源:网络整理
导读:我需要找到我的元组是否只包含None值. 我使用这段代码,但我不确定这是好的做法: # coding=utf8def isOnlyNoneValuesTuple(t): """ test if tuple contains only None values """ if not len(tuple(itertools.ifilter(None,t))): return True else: return F
我需要找到我的元组是否只包含None值.

我使用这段代码,但我不确定这是好的做法:

# coding=utf8

def isOnlyNoneValuesTuple(t):
    """
    test if tuple contains only None values
    """
    if not len(tuple(itertools.ifilter(None,t))):
        return True
    else:
        return False

print isOnlyNoneValuesTuple((None,None,))
print isOnlyNoneValuesTuple((None,"val",))

你知道其他好的做法来测试它吗?

谢谢你的意见

解决方法

return t.count(None) == len(t)

它比使用all更快:

>>> setup = 't = [None,None]*100; t[1] = 1'
>>> timeit.timeit('all(item is None for item in t)',setup=setup)
0.8577961921691895
>>> timeit.timeit('t.count(None) == len(t)',setup=setup)
0.6855478286743164

并且根据非元素的索引减少所有的速度:

>>> setup = 't = [None,None]*100; t[100] = 1'
>>> timeit.timeit('all(item is None for item in t)',setup=setup)
8.18800687789917
>>> timeit.timeit('t.count(None) == len(t)',setup=setup)
0.698199987411499

但是大列表的速度更快:

>>> setup = 't = [None,None]*10000; t[100] = 1'
>>> timeit.timeit('t.count(None) == len(t)',setup=setup)
47.24849891662598
>>> timeit.timeit('all(item is None for item in t)',setup=setup)
8.114514112472534

但并非总是如此:

>>> setup = 't = [None,None]*10000; t[1000]=1'
>>> timeit.timeit('t.count(None) == len(t)',setup=setup)
47.475088119506836
>>> timeit.timeit('all(item is None for item in t)',setup=setup)
72.77452898025513

结论我为自己做了所有或计数的速度 – 非常依赖于数据.如果你在非常大的列表中拥有所有None的概率 – 不要使用all,那么在这种情况下它非常慢.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读