On 2007-12-10, Peter Otten <[EMAIL PROTECTED]> wrote: > Neil Cerutti wrote: >>> def test(): >>> ll = LinkedList([random.randint(1,1000) for i in range(10)]) >>> >>> for el in ll: >>> if el.value%2==0: >>> ll.delete(el) >>> >>> print [el.value for el in ll] >>> >>> >>> if __name__=='__main__': >>> test() >>> >>> Support for deleting elements other than the current one, and >>> insertBefore/insertAfter methods is left as an exercise. >> >> Making an object its own iterator [works] for files, but not >> for a container. After the deletions, you can never iterate >> again. > > Look at the test code again -- there is a second iteration > after the deletions (the list comprehension).
Thanks for the correction. I didn't think that through. > However, you will get into trouble if you try to run two > simultaneous iterations over the same LinkedList, so there is > room for another exercise ;) I just remembered that iter(an_iterator) is itself, so nothing prevents you from saving a reference to it before iterating: iter = iter(a_linked_list) for it in iter: if it.value % 2 == 0: iter.delete() It looks a little weird, but perhaps it's still better than a while loop. -- Neil Cerutti The pastor will preach his farewell message, after which the choir will sing, "Break Forth Into Joy." --Church Bulletin Blooper -- http://mail.python.org/mailman/listinfo/python-list