Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多个For循环,如果不满足条件,则仅打印一次else_Python - Fatal编程技术网

Python 多个For循环,如果不满足条件,则仅打印一次else

Python 多个For循环,如果不满足条件,则仅打印一次else,python,Python,循环中有一个循环,如果满足条件,则运行一些代码。然而,如果条件不满足,我需要它来打印一些东西。虽然如果我在任何位置添加代码,它会被打印多次。如果不满足条件,如何使其只打印一次 some_list = {'a_list': [{'name': 'Tom', 'age': 25}, {'name': 'John', 'age': 25}, {'name': 'Val', 'age': 25}], 'b_list': [{'name': 'Don', 'age': 25}, {'name': 'Tim

循环中有一个循环,如果满足条件,则运行一些代码。然而,如果条件不满足,我需要它来打印一些东西。虽然如果我在任何位置添加代码,它会被打印多次。如果不满足条件,如何使其只打印一次

some_list = {'a_list': [{'name': 'Tom', 'age': 25}, {'name': 'John', 'age': 25}, {'name': 'Val', 'age': 25}], 'b_list': [{'name': 'Don', 'age': 25}, {'name': 'Tim', 'age': 25}, {'name': 'San', 'age': 25}]}

findperson = 'San'

for i in some_list:
    for y in some_list[i]:
        if y['name'].lower() == findperson.lower():
            print('Friend found')
            break
else:            
    print('Friend not found')
试试这个:

some_list={'a_list':[{'name':'Tom','age':25},{'name':'John','age':25},{'name':'Val','age':25},'b_list':[{'name':'Don','age':25},{'name':'Tim','age':25},{'name':'San age':25}
findperson='San'
发现=错误
对于某些列表中的i:
对于某些_列表中的y[i]:
如果y['name'].lower()==findperson.lower():
打印('找到朋友')
找到=真
如果发现:
打破
如果未找到:
打印('未找到朋友')

for else
是一个很好的使用
中断
条件的试验,但它仅在获得1-for循环时有效,但在这里,获得2-for循环时,您可以使用一个标志:

some_list = {'a_list': [{'name': 'Tom', 'age': 25}, {'name': 'John', 'age': 25}, {'name': 'Val', 'age': 25}], 'b_list': [{'name': 'Don', 'age': 25}, {'name': 'Tim', 'age': 25}, {'name': 'San', 'age': 25}]}

findperson = 'San'
found = False

for i in some_list:
    for y in some_list[i]:
        if y['name'].lower() == findperson.lower():
            print('Friend found')
            found = True
            break
    if found:
        break

if not found:
    print('Friend not found')

您可以对内循环使用
any
(以及从外循环中使用
break

。。。甚至整个事情:

if any(y['name'].lower() == findperson.lower() 
       for i in some_list for y in some_list[i]):
    print('Friend found')
else:            
    print('Friend not found')
如果您还需要真正的朋友,您可以使用
next

for i in some_list:
    friend = next((y for y in some_list[i] if y['name'].lower() == findperson.lower()), None)
    if friend is not None:
        print('Friend found:', friend)
        break
else:            
    print('Friend not found')
也适用于嵌套生成器,如上面的
any

friend = next((y for i in some_list for y in some_list[i] 
                 if y['name'].lower() == findperson.lower()),
              None)
if friend is not None:
    print('Friend found:', friend)
else:            
    print('Friend not found')

另一种可能的解决方案是使用函数,而不是使用标志和
break
(只中断内部循环)。这样,您只需使用
返回
。这还有一个好处,即在找到匹配项后停止搜索

some_list = {'a_list': [{'name': 'Tom', 'age': 25}, {'name': 'John', 'age': 25}, {'name': 'Val', 'age': 25}],
             'b_list': [{'name': 'Don', 'age': 25}, {'name': 'Tim', 'age': 25}, {'name': 'San', 'age': 25}]}

search_name = 'San'

def find_person(data, name_to_find):
    for i in data:
        for y in data[i]:
            if y['name'].lower() == name_to_find.lower():
                print('Friend found')
                return
    print('Friend not found')

find_person(some_list, search_name)

imo的最佳选择是将嵌套的for循环放入函数中,并在找到好友时返回,但如果由于某种原因无法返回,则可以在找到好友时提前结束嵌套的for循环,而不使用标志,方法如下

some_list = {'a_list': [{'name': 'Tom', 'age': 25}, {'name': 'John', 'age': 25}, {'name': 'Val', 'age': 25}], 
             'b_list': [{'name': 'Don', 'age': 25}, {'name': 'Tim', 'age': 25}, {'name': 'San', 'age': 25}]}

findperson = 'San'

for i in some_list:
    for y in some_list[i]:
        if y['name'].lower() == findperson.lower():
            print('Friend found')
            break
    else:
        continue
    break
else:
    print('Friend not found')

@ValdemarT您所追求的输出到底是什么?问题是它在找到您要找的人后仍然运行循环。不过这只是一个小小的挫折,它只会略微降低计算机的速度。@雅各布真正的解决方案是在函数中使用嵌套循环,这样就可以使用
return
,而不是
break
和一个标志,或者使用不同的数据结构。你是对的,我应该尽快退出@JacobI希望函数返回实际的friend,然后在函数之外进行打印。@tobias_k我同意,但我会让OP实现:)
some_list = {'a_list': [{'name': 'Tom', 'age': 25}, {'name': 'John', 'age': 25}, {'name': 'Val', 'age': 25}], 
             'b_list': [{'name': 'Don', 'age': 25}, {'name': 'Tim', 'age': 25}, {'name': 'San', 'age': 25}]}

findperson = 'San'

for i in some_list:
    for y in some_list[i]:
        if y['name'].lower() == findperson.lower():
            print('Friend found')
            break
    else:
        continue
    break
else:
    print('Friend not found')