如果迭代的所有成员都为真,那么python中是否有一个返回true的函数?

时间:2013-09-09 00:51:05

标签: python lambda reduce hasattr

我正在尝试学习在python中做简单事情的不同方法,同时还要学习一些功能实践。我有一些用户输入的数字,我想知道它们是否真的是数字。我想出了这种经典的解决方案:

def foo(list_of_inputs):
    for n in list_of_inputs:
       if not hasattr(n, "real"):
           # some number is not a number!
           return False
    # all are numbers
    return True

然而,我发现了另外一些可能具有潜力的“事物”:

def foo(list_of_inputs):
    bool_list = map(lambda input: hasattr(input, "real"), list_of_inputs)
    return reduce(lambda x, y: x == y, bool_list)

我认为,如果一个集合的所有成员,可迭代的或者我正在寻找的正确概念都是“真实的”,那么可能会返回“True”的函数,这可能已经有点普遍,而且,这个当找到“False”时,第二次尝试不会返回,而经典的那次尝试...但我发现它很优雅,也许那是因为我还没有编程。

所以我的问题是:“可能更好”的方法是什么?

2 个答案:

答案 0 :(得分:3)

如前所述,all功能可以满足您的需求。您所描述的内容也可以使用str.isnumeric()函数完成。

def foo(listOfInputs):
    return all(map(str.isnumeric,listOfInputs))

编辑:我发现['1','2','3.14','4']失败了,这有点烦人。也许有人可以提出比这更聪明的解决方案,但我决定在try中包含一个稍微修改过的方法:

def foo(listOfInputs):
    try:
        return all(map(float,listOfInputs))
    except ValueError:
        return False

适用于:

['1','2','-3','4']
['1','2','3.14','4']

答案 1 :(得分:2)

你的意思是内置的all功能?

  

如果iterable的所有元素都为true(或者iterable为空),则返回True。相当于: