我正在学习 Python,我有一种情况,我想使用迭代器中的项目。棘手的部分是,在某些条件下,我想“取消迭代”。也就是说,在循环之前将一个项目放回迭代器的前面。
例如,假设我正在从树上摘苹果。我的水果篮只能装 10 公斤,然后才需要清空。但是我必须先挑选每个苹果,然后才能称重并确定这个苹果是否会超过篮子的容量。
在像 Perl 这样的语言中,我可以unshift()
将苹果放回树上,然后让循环表达式重新挑选苹果:
while ($apple = shift(@tree)) {
$wt = weight($apple);
if ($wt + weight(@basket) > 10) {
send(@basket);
@basket = ();
unshift(@tree, $apple);
} else {
push(@basket, $element);
}
}
否则我也可以使用redo
,它在块顶部恢复处理,而不评估循环表达式。因此,在篮子被清空后,同一个苹果可以重新加工。
while ($apple = shift(@tree)) {
$wt = weight($apple);
if ($wt + weight(@basket) > 10) {
send(@basket);
@basket = ();
redo;
} else {
push(@basket, $apple);
}
}
对于这类问题,最Pythonic的解决方案是什么?