for row in b:
for drug in drug_input:
for brand in brand_names[drug]:
我该如何从第三个循环中退出当前循环,并进入下一个值 for row in b:
?
for row in b:
for drug in drug_input:
for brand in brand_names[drug]:
我该如何从第三个循环中退出当前循环,并进入下一个值 for row in b:
?
下面这个方法使用布尔变量来检查是否完成:
done = False
for x in xs:
for y in ys:
if bad:
done = True
break
if done:
break
如果没有使用break,这个代码块将继续执行
。如果已经使用了break,则else
语句将被跳过,因此它将看到下一个break
。这种方法的优点是不需要使用变量,但有些人可能会觉得更难阅读。
for x in xs:
for y in ys:
if bad:
break
else:
continue
break
for row in b:
more_drugs = True
for drug in drug_input:
for brand in brand_names[drug]:
if something:
more_drugs = False
break
if not more_drugs:
break
Python没有一种控制结构可以同时从两个循环中跳出,因此您需要手动执行类似于这样的操作。
for row in b
看起来并不令人鼓舞。 - Katriel在我看来,异常处理比在各处设置变量要好。
for row in b:
for drug in drug_input:
try:
for brand in brand_names[drug]:
if some_condition:
raise StopIteration
except StopIteration:
break
pass
而不是break
会更易读。顺便说一句,这种方法很棒 :) - MestreLionclass LocalBreak(Exception): pass
try:
for i in ...:
for h in ...:
for j in ...:
if should_break(j):
raise LocalBreak()
except LocalBreak:
pass
for a in aa:
for b in bb:
for c in cc:
if c == a[b]:
break
else:
continue
break
Python支持for...else
语句。当内部的break
未触发时,将会执行else
块。
return
语句。这将强制退出任意数量的循环。例如:def example(self, drug_input):
ok = False
for x in drug_input["names"]:
for y in range(drug_input["number_of_drugs"]):
for z in drug_input["list_of_drugs"]:
# do stuff
if ok:
return drug_costs
也许像这样重新构思逻辑很棘手,但我敢打赌重构会在其他方面有所帮助。
未经测试:
inner_termination=False
for row in b:
for drug in drug_input:
for brand in brand_names[drug]:
<blah>
if break_condition:
inner_termination=True
break
<blah>
if inner_termination:
inner_termination=False
break
for row in b:
ok = True
for drug in drug_input:
if not ok:
break;
for brand in brand_names[drug]:
if not ok:
break
if whatever:
ok = False
b
是一个包含一些药品的 CSV 行列表。为什么你需要针对每行 CSV 中已知的每种药品进行迭代? - Katriel