Я изучаю Python, и у меня есть ситуация, когда я хочу потреблять элементы из итератора. Трудная часть заключается в том, что при определенных условиях я хочу "un-итерации". То есть, положите элемент обратно на переднюю часть итератора до того, как я зациклится.
Например, предположим, что я собираю яблоки из дерева. Моя корзина с фруктами может содержать только 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 решение для такого рода проблем?