循环中有一个循环,如果满足条件则运行一些代码。但是,如果不满足条件,我需要它来打印一些东西。虽然如果我将代码添加到任何位置,它会被打印多次。如果不满足条件,如何让它只打印一次?
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')
最佳答案
您可以对内部循环使用any
(并在外部循环中使用break
)...
for i in some_list:
if any(y['name'].lower() == findperson.lower() for y in some_list[i]):
print('Friend found')
break
else:
print('Friend not found')
...甚至整个事情:
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')
如果你还需要实际的 friend ,你可以使用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')
关于python - 多个for循环,不满足条件只打印一次else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56024281/