Python 在转到 else 语句之前检查整个循环

Python check the whole loop before going to the else statement

如果 if 条件为假,我如何 运行 完成整个循环然后转到 else 语句?

输出为:

No

No

Yes

但我只希望它在所有值都不相等时跳转到 else 语句!

test_1 = (255, 200, 100)
test_2 = (200, 200, 100)
test_3 = (500, 50, 200)

dict = {"test_1":test_1,
        "test_2":test_2,
        "test_3":test_3}


for item in dict:
   if dict[item] == (500, 50, 200):
        print('Yes')
   else:
        print('No')

基本上输出应该是这样的,因为其中一个值是真的。

Yes

您需要 运行 循环直到找到匹配项。为此,您可以使用 any 函数,例如

if any(dict_object[key] == (500, 50, 200) for key in dict_object):
    print('Yes')
else:
    print('No')

我们将生成器表达式传递给 any 函数。生成器表达式从字典中获取每一项并检查它是否等于 (500, 50, 200)。一旦找到匹配项,any 将立即 return True,其余的迭代甚至不会发生。如果 none 项匹配 (500, 50, 200)any 将 return FalseNo 将被打印。


编辑: 在聊天中与 OP 进行了长时间的讨论后,他实际上也想知道匹配的项目。因此,更好的解决方案是像 NPE 的其他答案一样使用 for..else,例如

for key in dict_object:
   if key.startswith('test_') and dict_object[key] == (500, 50, 200):
        # Make use of `dict_object[key]` and `key` here
        break
else:
    print('No matches')

But I only want it to jump to the else statement if all of the values does not equal!

Python 的 for-else 构造可用于执行此操作:

for item in dict:
   if dict[item] == (500, 50, 200):
        print('Yes')
        break
else:
    print('No')

有关进一步讨论,请参阅 Why does python use 'else' after for and while loops?

但是,在这个特定的实例中,我根本不会使用显式循环:

print ("Yes" if (500, 50, 200) in dict.values() else "No")

也许使用 in 运算符:

item_appears_in_dict = item in dict.values()
print "Yes" if item_appears_in_dict else "No"