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')