Pietonic相当于不移动还是重做?

我正在学习 Python,我有一种情况,我想从迭代器中消耗项目.棘手的一部分是在某些情况下,我想“反复迭代”.也就是说,在循环之前,将一个项目放回到迭代器的前面.

例如,假设我从树上挑苹果.我的水果篮只能容纳10公斤才能清空.但是我必须先挑选每个苹果,然后才能称量它,并确定这个苹果是否会超过篮子的容量.

在像Perl这样的语言中,我可以将苹果移回树上,然后让循环表达式重新选择苹果:

while ($apple = shift(@tree)) {
  $wt = weight($apple);
  if ($wt + weight(@basket) > 10) {
    send(@basket);
    @basket = ();
    unshift(@tree, $apple);
  } else {
    push(@basket, $element);
  }
}

否则我也可以使用重做,它在块的顶部恢复处理,而不评估循环表达式.所以在篮子被清空之后,同一个苹果可以重新处理.

while ($apple = shift(@tree)) {
  $wt = weight($apple);
  if ($wt + weight(@basket) > 10) {
    send(@basket);
    @basket = ();
    redo;
  } else {
    push(@basket, $apple);
  }
}

对于这种问题,最常见的pythonic解决方案是什么?

当else子句应该总是发生时,为什么要打扰呢?

for apple in tree:
    if (apple.weight + basket.weight) > 10:
       send(basket)
       basket.clear()
    basket.add(apple)

无论如何,我相当确定Python没有您要寻找的行为.

相关文章
相关标签/搜索