使用 Python 测试元组是否仅包含 None 值 [英] Test if tuple contains only None values with Python
问题描述
我需要找出我的元组是否只包含 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
更快:
和all
的速度根据非None
元素的索引而降低:
但是大列表更快:
<预><代码>>>>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屋!