zoukankan      html  css  js  c++  java
  • Python之迭代器

    迭代器( iterator)

    ——是访问集合元素的一种方式,迭代器从集合的第一个元素开始访问,直到所有元素被访问结束。并且,迭代器只能向前访问。

    • 优点:不要求事先准备好整个迭代过程中的所有元素,迭代器仅仅在迭代到某个元素时才计算该元素。在这之前和之后,元素可以不存在或者被销毁。这一大优点使迭代器特别适合用于遍历一些巨大的或是无限的集合。
    • 迭代器更大的功劳是:提供一个统一的访问集合的接口,只要是定义了__iter__()方法对象,就可以使用迭代器访问。
    • 迭代器有两个基本的方法:
    1. next()方法   : 返回迭代器的下一个元素
    2. __iter__方法 : 返回迭代器对象本身

    使用迭代器

    • 使用内建函数iter(iterable)可以获取迭代器对象

    1

    2

    3

    4

    >>> list = range(5)

    >>> it = iter(list)

    >>> it

    <listiterator object at 0x01A63110>

    • 使用next()方法可以访问下一个元素

    1

    2

    3

    4

    5

    6

    >>> it.next()

    0

    >>> it.next()

    1

    >>> it.next()

    2

    • python处理迭代器越界是抛出StopIteration异常

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    >>> it.next()

    3

    >>> it.next

    <method-wrapper 'next' of listiterator object at 0x01A63110>

    >>> it.next()

    4

    >>> it.next()

    Traceback (most recent call last):

      File "<pyshell#27>", line 1, in <module>

        it.next()

    StopIteration

    • 使用迭代器进行遍历

    >>>list = range(5)

    >>>it = iter(list)try:

                 while True:

                       val = it.next()

                 print valexcept StopIteration:

            pass

    结果:

    1

    2

    3

    4

    5

    6

    >>>

    0

    1

    2

    3

    4

     

    • Python专门为for关键字做了迭代器的语法糖。

    在for循环中,Python将自动调用工厂函数iter()获得迭代器,自动调用next()获取元素,还完成了检查StopIteration异常的工作

    如下:

    >>> a = (1, 2, 3, 4)

    >>> for key in a:

              print key

    1

    2

    3

    4

    * 解析:首先python对关键字in后的对象调用iter函数迭代器,然后调用迭代器的next方法获得元素,直到抛出StopIteration异常。

    •  默认情况下,dict迭代的是key(for key in d);

       如果要迭代value,可以用for value in d.itervalues();

       如果要同时迭代key和value,可以用for k, v in d.iteritems()。

    •  Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

    >>> for i, value in enumerate(['A', 'B', 'C']):

    ...     print i, value

    ...

    0  A

    1  B

    2  C

    • 内建的isinstance函数可以判断一个变量是不是字符串:

    >>> x = 'abc'

    >>> y = 123

    >>> isinstance(x, str)

    True

    >>> isinstance(y, str)

    False

  • 相关阅读:
    POJ 3114 Tarjan+Dijkstra
    278. First Bad Version
    209. Minimum Size Subarray Sum
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    710. Random Pick with Blacklist
    767. Reorganize String
    524. Longest Word in Dictionary through Deleting
    349. Intersection of Two Arrays
    350. Intersection of Two Arrays II
  • 原文地址:https://www.cnblogs.com/sunshine-blog/p/8318788.html
Copyright © 2011-2022 走看看