如何快速检查清单?

时间:2015-10-08 07:33:51

标签: python list python-2.7 python-2.x

假设我有一个列表如下:

a = ['111', '222', '3334', '12']

当我只检查一个元素时,长度大于或等于3,它将返回错误并停止检测。

这是我的方法:

for b in a:
    if len(b) != 3:
        return False

但它应该有更好的方法吗,怎么做?

用于讨论anyall的效果。 sureshv提及any更好all但我使用timeit证明all优于any。但是,not all(...)可以忽略,not的性能代价很高。

from timeit import timeit

print timeit('any(len(x) != 3 for x in ["111", "222", "3334", "12", "111", "222" , "111", "222" , "111", "222"])', number=100000)
print timeit('all(len(b) == 3 for b in ["111", "222", "3334", "12", "111", "222" , "111", "222" , "111", "222"])', number=100000)
print timeit('not all(len(b) == 3 for b in ["111", "222", "3334", "12", "111", "222" , "111", "222" , "111", "222"])', number=100000)

>>>first
0.0830238555881
0.0820391147939
0.0863792158681

>>>second
0.0826572149797
0.0818332714663
0.0830155876428

>>>third
0.0836901379378
0.0809026999688
0.0812479579601

2 个答案:

答案 0 :(得分:2)

我认为你在寻找:

if any(len(x) != 3 for x in a):
    return False

答案 1 :(得分:1)

您可以使用全部 -

def check_element(a):
    return all(len(b) == 3 for b in a)

或传统上使用lambda

def check_element(a):
    return not bool(list(filter(lambda b: b != 3, a)))

虽然第一种方法更加pythonic,这是你应该去的那个。