我正在學習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