3

我正在尝试学习在 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”,则可能返回“True”的函数可能已经有些普遍,而且,第二次尝试没有当找到“False”时不会返回,而经典的会返回......但我觉得它很优雅,也许那是因为我还没有进行一般的编程。

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

4

2 回答 2

3

如前所述,该all功能将执行您想要的操作。你描述你想要做的事情也可以用这个str.isnumeric()功能来完成。

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

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

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

这适用于:

['1','2','-3','4']
['1','2','3.14','4']
于 2013-09-09T00:59:01.147 回答
2

你的意思是像内置all函数这样的东西?

如果可迭代对象的所有元素都为真(或可迭代对象为空),则返回 True。相当于:

于 2013-09-09T00:53:00.113 回答