有没有更短的方法来做到这一点?

时间:2017-07-05 22:05:35

标签: python-3.x

我试图以较短的方式找到这样做,我不喜欢最后不使用其他因为没有它我看起来很奇怪。出于某种原因,这对我有用。如果我添加,"否则:返回True"它只会从列表中查看第一个true,然后返回True但不会检查其余的......并将结束函数

b = [[True, True, True], [True, True, True], [True, True, False]]

for i in range(3):
    for j in range(3):
        if b[i][j] == False:
             return False
return True

2 个答案:

答案 0 :(得分:2)

我想一个很短的方法就是:

return all(i for l in b for i in l)

答案 1 :(得分:1)

您可以使用allany执行此操作:

all(all(x) for x in b)

OR

not any(not y for x in b for y in x)

在任何一种情况下,表达式的值都与原始函数的返回值相同。与原始循环一样,这两个表达式都是短路的:只要在嵌套列表中遇到False元素,它们就会停止。

在原始代码中,在第一个元素上返回True自然会结束该功能。这就是return的工作原理。如果你绝对必须有一个else条款来取悦你的内心(我建议反对它),请改用else: continue。这完全是多余的(因此通常是不合需要的),但它会指示循环继续,直到找到False而不是立即从函数返回。