我正在尝试学习在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”时,第二次尝试不会返回,而经典的那次尝试...但我发现它很优雅,也许那是因为我还没有编程。
所以我的问题是:“可能更好”的方法是什么?
答案 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。相当于: