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
     
  • 相关阅读:
    700. Search in a Binary Search Tree
    100. Same Tree
    543. Diameter of Binary Tree
    257. Binary Tree Paths
    572. Subtree of Another Tree
    226. Invert Binary Tree
    104. Maximum Depth of Binary Tree
    1、解决sublime打开文档,出现中文乱码问题
    移植seetafaceengine-master、opencv到ARM板
    ubuntu16.04-交叉编译-SeetaFaceEngine-master
  • 原文地址:https://www.cnblogs.com/flex-/p/5549198.html
Copyright © 2011-2022 走看看