zoukankan      html  css  js  c++  java
  • python-切片 迭代 生成器

    1 切片操作

    >>> L
    ['aaa', 'bbb', 'ccc', 'ddd']
    >>> L[0:3]
    ['aaa', 'bbb', 'ccc']
    >>> L[::5]
    [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
    0-100的所有数字,每5个取一个
    View Code

    2 迭代操作 只要有可迭代对象就可以迭代

    1 >>> d = {'a':1, 'b':2, 'c':3}
    2 >>> for key in d:
    3 ...     print key
    4 ...
    5 a
    6 c
    7 b
    View Code

    对字典进行迭代 默认迭代键 如果要迭代值,可以选用下面代码

    1 >>> d
    2 {'a': 1, 'c': 3, 'b': 2}
    3 >>> for values in d.itervalues():
    4 ...     print values
    5 ...
    6 1
    7 3
    8 2
    View Code
    d.itervalues()返回一个字典值的可迭代对象
    同时迭代键和值:
    1 >>> for k, v in d.iteritems():
    2 ...     print k, v
    3 ...
    4 a 1
    5 c 3
    6 b 2
    View Code

    2.1 判断可迭代对象

    1 >>> from collections import Iterable
    2 >>> isinstance(d.iteritems(), Iterable)
    3 True
    View Code
    2.3 enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身
    1 >>> for i, v in enumerate(['a', 'b', 'c']):
    2 ...     print i, v
    3 ...
    4 0 a
    5 1 b
    6 2 c
    View Code

    2.4 列表生成式

    1 >>> [x*x for x in range(1, 11)]
    2 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    3 需要生成的x*x元素放在前面
    View Code
    3 生成器
    生成列表的过程中是根据计算公式,边计算边生成,而不是一次生成
    3.1 只要把一个列表生成式的[]改成(),就创建了一个generator
    1 >>> L = [x*x for x in range(10)]
    2 >>> L
    3 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    4 列表生成式和生成器对比
    5 >>> g = (x*x for x in range(10))
    6 >>> g
    7 <generator object <genexpr> at 0x7f87935774b0>
    View Code

    通过生成器的next()方法可以很方便的生成后续元素,全部打印需要使用for循环变量

     1 >>> g.next()
     2 0
     3 >>> g.next()
     4 1
     5 >>> g.next()
     6 4
     7 >>> g.next()
     8 9
     9 >>> for n in g:
    10 ...     print n
    11 ...
    12 16
    13 25
    14 36
    15 49
    16 64
    17 81
    View Code
    3.2 通过yield也可以使用生成器函数
    如下通过yield生成一个生成器函数
    1 >>> def fib(max):
    2 ...     n, a, b = 0, 0, 1
    3 ...     while(n < max):
    4 ...             yield b
    5 ...             a, b = a, a + b
    6 ...             n = n + 1
    7 ...
    8 >>> fib(6)
    9 <generator object fib at 0x7f8793577aa0>
    View Code
    生成器函数和普通函数执行不同,生成器函数每往生成一次,就会从上一次yield处执行
    代码实例如下:
     1 >>> def odd():
     2 ...     print 'step 1'
     3 ...     yield 1
     4 ...     print 'step 2'
     5 ...     yield 2
     6 ...     print 'step 3'
     7 ...     yield 3
     8 ...
     9 >>> o = odd()
    10 >>> o.next()
    11 step 1
    12 1
    13 >>> o.next()
    14 step 2
    15 2
    16 >>> o.next()
    17 step 3
    18 3
    View Code
     
  • 相关阅读:
    地图校正方法心得
    投影的心得点滴
    android 打包 apk keystore
    scp命令详解
    ubuntu11.10真机调试nopermissions
    android adb server is out of date
    ubuntu删除默认jdk
    android 运行 错误 总结
    android file .apk is not a valid zip file adb install
    ubuntu系统目录结构
  • 原文地址:https://www.cnblogs.com/flex-/p/5549198.html
Copyright © 2011-2022 走看看