Python for循环在第一个项目后返回True

时间:2017-12-31 07:25:27

标签: python python-3.x for-loop

def checker(a_list):
    for item in a_list:
        if str(item).isdigit():
            return True
        else:
            return False

我用于检查器的变量是包含四个包含变量的字符串的列表。 我打算用它作为检查工具'查看另一个函数的所有输入值是否仅包含数字。

问题:如果a_list中的第一项不是数字,则检查器返回False。但是,如果第一个项目是数字,而列表中的任何其他项目都不是,则检查器仍会返回True。这会导致下一个函数继续使用非数字变量并导致错误。

我如何制作它让我的函数在返回True之前检查整个列表? 或者如果需要,我如何创建一个能够满足我所需要的新功能? 感谢

4 个答案:

答案 0 :(得分:4)

不要在循环中返回True。如果项目不是数字,则在循环中返回False。循环完成后移动return True

def checker(a_list):
    for item in a_list:
        if not str(item).isdigit():
            return False
    return True

答案 1 :(得分:3)

有用于检查多个条件的内置函数JSON spec(和 val v: ListMap[String, Int] = ListMap("c" -> 1, "AaAa" -> 2, "BBBB" -> 3, "AaBB" -> 4, "BBAa" -> 5) val jsonBad = JsonMethods.compact(Extraction.decompose(v)) val bad = Extraction.extract[Map[String, Int]](JsonMethods.parse(jsonBad)) val jsonGood = JsonMethods.compact(Extraction.decompose(v.toList)) val good = ListMap(Extraction.extract[List[(String, Int)]](JsonMethods.parse(jsonGood)): _*) println(s"'$jsonBad' => $bad") println(s"'$jsonGood' => $good") ):

any

答案 2 :(得分:1)

我假设您要检查a_list的所有元素是否返回True作为isdigit()的返回值。

在这种情况下,请使用内置函数all

all(str(s).isdigit() for s in a_list)

有关anyall的详情,请查看SO上的此链接:any and all explained

编辑:感谢@RoadRunner指出转换为str,因为OP在它的示例中给出了它。

答案 3 :(得分:0)

这应检查列表中的所有项目是否为数字

if all(str(x).isdigit() for x in a_list):
    return True
else:
    return False