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

Fre*_*rik 4 python loops if-statement

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

输出是:

没有

没有

但是如果所有值都不相等,我只希望它跳转到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')
Run Code Online (Sandbox Code Playgroud)

所以基本上输出应该说,因为其中一个值是真的.

the*_*eye 7

您需要运行循环,直到找到匹配.你可以使用any函数来实现这个目的

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

我们将生成器表达式传递给any函数.生成器表达式从dict中获取每个项目,并检查它是否等于(500, 50, 200).在找到匹配的那一刻,any它将True立即返回,其余的迭代甚至不会发生.如果没有任何项目匹配(500, 50, 200),any将返回False并将No打印.


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

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')
Run Code Online (Sandbox Code Playgroud)