使用 Python 测试元组是否仅包含 None 值 [英] Test if tuple contains only None values with Python

查看:66
本文介绍了使用 Python 测试元组是否仅包含 None 值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要找出我的元组是否只包含 None 值.

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

#coding=utf8def isOnlyNoneValuesTuple(t):"""测试元组是否只包含 None 值"""如果不是 len(tuple(itertools.ifilter(None, t))):返回真别的:返回错误打印 isOnlyNoneValuesTuple((None,None,None,None,None,None,None,None,None,None,None,None,))打印 isOnlyNoneValuesTuple((None,None,None,"val",None,None,None,None,))

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

谢谢您的意见

解决方案

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

而且它比使用 all 更快:

<预><代码>>>>setup = 't = [无,无]*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

all的速度根据非None元素的索引而降低:

<预><代码>>>>setup = 't = [无,无]*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 = [无,无]*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 = [无,无]*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,在这种情况下它会非常慢.

I need to find if my tuple contains only None value.

I use this code but i not sure it's the good practice:

# 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,None,None,None,None,None,None,None,None,None,None,))
print isOnlyNoneValuesTuple((None,None,None,"val",None,None,None,None,))

Do you know other good practice to test it?

Thank you for your opinions

解决方案

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

and it is faster than using 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

and speed of all decreases according to index of not None element:

>>> 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

BUT with big lists all is faster:

>>> 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

BUT not always though:

>>> 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

Conclusion that i make for myself about speed of all or count - very depends of data. If probability that you have all None in very big list - dont use all, it is very slow in that case.

这篇关于使用 Python 测试元组是否仅包含 None 值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆