Making the Linked List Iterable
00:00
Earlier, I mentioned that one limitation of our LinkedList
is that there’s no easy way to use it as an iterable—that is, we can’t use it in places where an iterable type is expected, such as in a for
loop. To mitigate this, we added a .__repr__()
method that returned a formatted string representation of the LinkedList
—but that’s really more useful in the context of debugging than anywhere else. To make our LinkedList
iterable so we can step through each Node
one by one, all we need to do is add a .__iter__()
method.
00:38
Just like before, we start by creating a new variable for the current node and setting it equal to the .head
of the LinkedList
.
00:47
Now we can say while node is not None
, yield the current node
and set the current node
to the next one. This special yield
keyword is similar to return
, except that it doesn’t stop execution of the current method once it’s reached.
01:06
And that’s all it takes to make our LinkedList
iterable. Let’s try it out in the interactive shell.
01:14
for node in llist:
print(node)
. Remember, printing the Node
will print its .data
value. And, there is all the data.
01:29
In other articles, you might see traversal code like this wrapped inside a method called traverse()
or something similar. We can absolutely do that here, but it’s a bit more Pythonic if we take advantage of the .__iter__()
method provided by the language to make our list an iterable type.
Become a Member to join the conversation.