【发布时间】:2020-04-10 22:13:14
【问题描述】:
我有一个下面的python代码:
def get_sess(sheet, i):
first_time = True
old_eid = " "
old_sess = " "
k = dict()
p = []
for i in range(i, 2712): # (pt1)
eid = str(sheet.cell_value(i, 2)).zfill(3)
if first_time:
old_eid = eid
first_time = False
if old_eid == eid:
old_sess = str(sheet.cell_value(i, 21)).zfill(3)
if d:
for z in range(len(d)): # (pt2)
if d[z]['sess_name'] == old_sess:
# This means this sess data is already saved in list, so ignore
continue
new_sess = old_sess
weight = sheet.cell_value(i, 14)
product = str(sheet.cell_value(i, 5)).zfill(3)
k['sess_name'] = old_sess
k['weight'] = weight
t = 0
while new_sess == old_sess:
product = str(sheet.cell_value(i + t, 5)).zfill(3)
p.append(product)
t = t + 1
new_sess = str(sheet.cell_value(i + t, 21)).zfill(3)
k['product'] = p
d.append(k)
在上述函数中,我在pt1 和pt2 有两个for 循环。在第二个 for 循环中,我有一个 if 条件,我正在检查 old_sess 是否与存储在列表中的 sess 相同,如果是,我需要跳过它之后的所有代码,并希望首先再次返回我的代码for 循环。但是,如果我在 if 条件中使用 continue 或 break,它只会中断第二个 for 循环并执行我不想要的其余代码。
如果if条件成立,有什么办法可以直接跳转到第一个for循环。
谢谢
【问题讨论】:
-
This question 似乎是重复的。此外,在函数中提取双循环并将
return用作多个break可以工作,并且是Pythonic。编辑:杰森贝克的回答明确提到,当我第一次浏览这个问题时,我似乎跳过了它。 -
你在迭代第二个循环是什么?
z在第二个 for 块内根本没有被引用。 -
我认为给出的重复目标不是最好的,这会更好stackoverflow.com/questions/189645/…
-
+1 表示
return解决方案。始终可以构造您的代码,以便return启用多循环中断。而且它显然比布尔替代更 Pythonic