Are Python deques linked lists?

Neil Cerutti horpner at yahoo.com
Mon Dec 10 13:36:38 EST 2007


On 2007-12-10, Peter Otten <__peter__ at web.de> 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



More information about the Python-list mailing list