我正在尝试学习在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”时会返回,而经典的却会…但我觉得它很优雅,也许那是因为我还没有编程.
所以我的问题是:“可能更好”的方法是什么?
解决方法:
如上所述,all函数将完成您想要的操作.您所描述的内容也可以使用str.isnumeric()函数完成.
def foo(listOfInputs):
return all(map(str.isnumeric,listOfInputs))
编辑:我发现它在[‘1′,’2′,’3.14’,’4’上失败了,这有点烦人.也许有人可以提出比这更聪明的解决方案,但我决定在尝试中包含一个稍微修改过的方法:
def foo(listOfInputs):
try:
return all(map(float,listOfInputs))
except ValueError:
return False
这适用于:
['1','2','-3','4']
['1','2','3.14','4']