我正在学习Python,并且我有一种情况需要使用迭代器中的项目。棘手的部分是,在某些条件下,我想“不重复”。也就是说,在我循环之前,将一个项目放回到迭代器的前面。pythonic相当于不换或重做?
例如,假设我正在从树上摘苹果。需要清空前,我的水果篮只能装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);
}
}
什么是对这类问题的最Python的解决方案?
如果$重量> 10则是一个无限循环(第一示例吃的所有存储器,第二个刚刚从不停止)。 – jfs 2009-01-08 20:48:44
@ J.F .:你是对的,但在这种情况下,假设没有一个苹果会超过10公斤是安全的。 – 2009-01-08 22:46:30