How to create an iterator in Python?

WBOY
Release: 2023-04-21 12:10:08
forward
1311 people have browsed it

What is an iterator

What ispythonIterator? Let’s take the simplest example:

list1 = ["pdudo","juejin","hello"]
tuple1 = ("pdudo","juejin","hello")
dict1 = {"name":"pdudo"}

for i in list1:
    print(i)
for i in tuple1:
    print(i)
for i in dict1:
    print(i)
Copy after login

This is the python iterator. Okay, that’s it, let’s do it manually.

Yes, using the for...in method, the bottom layer uses iterators. When you wrote before, you were never curious about why you traverse different All data types can be used for...in is universal?

My brother, I am the same. I have never thought about why it can be written like this. We have already talked about the iterator syntax. Next, let’s peel off the veil of iterators.

Why an iterator is needed

As long as it meets the python iterator conditions, you can use for...in to traverse elements, that is: Use the same code to traverse different data containers. I think this is the root cause.

If the above description is not clear, we can use c and python to traverse the array and string, and we will have a clear understanding.

How to create an iterator in Python?

The above code is c language traversing array"pdudo","hello","juejin"and stringpdudohellojuejin, we need to write the critical value of the traversal condition ourselves.

And how to use python to write it? Let’s take a look.

list1 = ["pdudo","hello","juejin"]
char1 = "pdudohellojuejin"

for v in list1:
    print(v)

for c in char1:
    print(c)
Copy after login

You only need to define the array and string, and then use for...in and you are done.

I think the above example is enough to prove why you should use iterators, because it’s really fun.

How iterators work

After going through the first two paragraphs, I guess you must want to know how iterators work, right? Now it's here.

When using the for...in statement, it will call the inter() object, which will return an iterator object. The object also defines the __next__() method, which returns one container element at a time. When no more elements can be returned, a StopIteration exception will be thrown to indicate for Terminate the loop.

Still don’t understand? It doesn’t matter, let’s write another case to illustrate.

list1 = ["pdudo","hello","juejin"]

it = iter(list1)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
Copy after login

The above code defines a list whose values ​​are: "pdudo", "hello", "juejin", and then calls the iter method, which will return an iterator, and then The next method is called to return the next element, but the length of the list we defined is 3, and the next method is called 4 times. It can be seen that the last time an exception will be thrown.

After we execute, the effect is as follows:

How to create an iterator in Python?

It can be seen that it is consistent with our above guess, in the for...in statement , the inter() container object is also called, and __next__ is used to return subsequent iterable objects, and so on, until an exception StopIteration is encountered and the loop ends.

Okay, do you know how iterators work? So, let’s throw another question to see if you can answer it? How to determine if a data type can be iterated?

How to create an iterator

We have learned how to use iterators and know how iterators work. This paragraph will introduce how to create an iterator. Before looking at this , let’s think about a question, will the following code report an error?

a = 9527
for i in a:
    print(i)
Copy after login

We use for...in to traverse a int type of data.

The above code will of course report an error, which leads to our knowledge point: What kind of data type can be iterated?

is like this. Whether it can be iterated depends on whether the method has a __iter__ method.

You can look at the following example. We have customized an iterator for flashback output data.

#!/bin/env python

class flashBack:
    def __init__(self,list1):
        self.data = list1
        self.index = len(list1)-1

    def __iter__(self):
        return self

    def __next__(self):
        if self.index < 0:
            raise StopIteration

        val = self.data[self.index]
        self.index = self.index - 1
        return val

def main():
    list1 = [1,2,3,4,5]
    tuble1 = ("pdudo","juejin","hello")

    for i in flashBack(list1):
        print(i)

    for i in flashBack(tuble1):
        print(i)

if __name__ == &#39;__main__&#39;:
    main()
Copy after login

After execution, the result is:

How to create an iterator in Python?

It can be seen that to create an iterator, at least the __iter__ method and are required __next__ method.

Okay, with this basic case, let’s write a linked list?

#!/bin/env python

class Node:
    def __init__(self,val):
        self.val = val
        self.nextNode = None

class Lists:
    def __init__(self,currentNodes):
        self.currentNode = currentNodes

    def __iter__(self):
        return self

    def __next__(self):
        if self.currentNode is None:
            raise StopIteration

        v = self.currentNode.val
        self.currentNode = self.currentNode.nextNode
        return v



def main() :
    node1 = Node(1)
    node2 = Node(2)
    node3 = Node(3)
    node1.nextNode = node2
    node2.nextNode = node3

    for i in Lists(node1):
        print(i)

if __name__ == &#39;__main__&#39;:
    main()
Copy after login

As shown in the above code, we first create the node Node, which has 2 values, val is the recorded value, and nextNode is the record The pointer to the next Node, and then defines the class Lists. When calling, you need to pass in a Node, which will currentNodes Record the current Node. Focus on __next__. When the current node is empty, StopIteration is returned to inform for that the iterator is over. Otherwise, take out the val of the current node and return it, and slide it down to the next node.

The above code, after running, the results are as follows:

How to create an iterator in Python?

The above is the detailed content of How to create an iterator in Python?. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:yisu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template