On Thu, 30 Jun 2016 01:29 am, Ian Kelly wrote: > On Tue, Jun 28, 2016 at 11:58 AM, Grant Edwards > <grant.b.edwa...@gmail.com> wrote: [...] >>> But then, if you wrap up your "while" loop as a generator that yields >>> things, you can then use it in a "for" loop which seems to me like >>> the Pythonic way to do things. :-) >> >> Yea, I keep telling myself that, but I never actually do it. > > Here you go: > > import collections > > class MutableIterator: [snip 8 methods and 33 lines of code]
> # Example: > >>>> mi = MutableIterator('bananas') >>>> for char in mi: > ... if char == 'a': > ... mi.extend(' yum') > ... print(char, end='') > ... > bananas yum yum yum I'm curious what REPL you are using, because in the vanilla Python interactive interpreter, the output if over-written by the prompt. That is, what I see in Python 3.6 is: py> nas yum yum yumpy> unless I take steps to prevent that. See below. But there's no need to go to such effort for a mutable iterator. This is much simpler: py> mi = list('bananas') py> for char in mi: ... if char == 'a': ... mi.extend(' yum') ... print(char, end='') ... else: # oh no, the feared for...else! ... # needed to prevent the prompt overwriting the output ... print() ... bananas yum yum yum py> This example shows two things: (1) There's no need for a MutableIterator, we have list; (2) Anyone who says that for...else without break is useless is wrong. -- Steven “Cheer up,” they said, “things could be worse.” So I cheered up, and sure enough, things got worse. -- https://mail.python.org/mailman/listinfo/python-list