![](/img/trans.png)
[英]Given an IF-ELSE statement inside a for loop, can I only skip the IF when the condition is met once? python
[英]Multiple For loops, print else only once if condition is not met
循環中有一個循環,如果條件滿足某些代碼運行。 但是,如果不滿足條件,我需要它來打印一些東西。 雖然如果我將代碼添加到任何位置,它會被多次打印。 如果不符合條件,如何只打印一次?
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')
如果你還需要真正的朋友,你可以使用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
(只打破內循環),另一種可能的解決方案是使用一個函數。 這樣你就可以簡單地使用return
。 這也有利於在找到匹配后停止搜索。
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)
嘗試這個:
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
if found:
break
if not found:
print('Friend not found')
for else
是一個很好的試驗,具有break
條件,但只有在你獲得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')
最好的選擇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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.