python学习之高级特性:

切片:对列表、元组、字符串、字典取中间的一部分,在C中一般是通过for循环拷贝/memcpy/strcat等操作。而python提供了更方便的切片操作符[m:n]:前闭后开,如果从0取m可以省略;如果只用[:]就是切整片;也可以从尾端切片[-m:]:前后的闭区间。

列表生成式:List(range(m,n)):构造一个大于等于m小于n的列表;对于想生成复杂的列表要用列表生成式:[生成对象的模型, for 变量 in 可迭代的对象   附加条件表达式]

            (1*1,2*2.。。且能被2整除的列表)方法有:最简单的方法:[x * x for x in range(1, 11) if x % 2 == 0 ] 或者

      >>> L = []

      >>> for x in range(1, 11):
              if(if x % 2 == 0 ):
             L.append(x )

    其它复杂的生成式举例:

         使用两个变量来生成 list
    >>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
    >>> [k + '=' + v for k, v in d.items()]
    ['y=B', 'x=A', 'z=C']
  把一个 list 中所有的字符串变成小写:
    >>> L = ['Hello', 'World', 'IBM', 'Apple']
    >>> [s.lower() for s in L]
    ['hello', 'world', 'ibm', 'apple']

迭代:对列表、元组、字符串、字典、生成器的遍历称为迭代,对任何可迭代的对象都可以用for循环:关于字典的迭代需要注意的是:默认是对键的迭代,如果要对值切片要用.value()的方法;要对键 和值同时迭代需要用到.item()的方     法:for k, v in d.items():         print(k,':',v) #‘:’是添加的连接符。

       problem1: 如何判断一个对象是可迭代对象呢?方法是通过 collections 模块的 Iterable 类型判断:
        >>> from collections import Iterable
        >>> isinstance('abc', Iterable) # str 是否可迭代

  problem2:如何对List的下标和元素同时迭代:答案是利用Python 内置的 enumerate 函数可以把一个 list 变成索引-元素对,这样就可以在 for 循环中同时迭代索引和元素本身:
        >>> for i, value in enumerate(['A', 'B', 'C']):
            ... print(i, value)
            ...
            0 A
            1 B
            2 C
生成器:产生背景:List可以产生大量的列表元素,但比较占存储空间,为了能推算后续结果又不想生成列表那么就可以用生成器了genarator

          创建方法:方法一:将列表生成式的【】改成?();方法2 :用函数的方法+yied关键字

          特点:1 当输入生成器不输出结果数据而只是说明生成器 2可以用next(生成器)递推出下一个结果直到StopIteration 错误或者for循环输出所有避免StopIteration 错误);3函数式生成器每遇到yield就产生中断(关键字yield也称为一般函数和函数式生成    器的最基本区别,还有2点:调用后生成器不输出结果值,可以用next()函数)

迭代器:可表示无限大的数据流。能用for循环的对象都是可Iterable 迭代的(isinstance(对象, Iterable) 来判断),但不一定是迭代器Iterator (是否可next(迭代器对象),或用isinstance(对象, Iterator) 来判断是否是迭代器)判断是否是迭代器,通过iter(可迭代对象)将可迭代但不是迭代器 的转变为迭代器。

posted on 2017-05-24 09:24  杰瑞鼠  阅读(169)  评论(0编辑  收藏  举报