zoukankan      html  css  js  c++  java
  • Python之高级特性

    3.高级特性

    3.1切片

    L = list(range(100))

    L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3

    如果第一个索引是0,还可以省略  L[:3]

    也支持取倒数元素 L[-2:] 取L集合的倒数2位元素

    L[10:20] 取前11-20个数:

    L[:10:2]取前10个数,每两个取一个

    L[::5]  所有数,每五个取1个

    'ABCDEFG'[:3]

    Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单

    3.2 迭代

    python中不管迭代对象有无下标,都可以进行迭代

    那么如何判断一个对象是否可迭代呢?from collections import Iterable

    isinstance('abc', Iterable) ;

    在Java里可以迭代下标,python里可以使用enumerate 函数迭代索引和元素的

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

    ...     print(i, value)

    3.3 列表生成,是Python内置的非常简单却强大的可以用来创建list的生成式。

    L = []

    >>> for x in range(1, 11):

    ...    L.append(x * x)#使用循环

    #使用列表生成式

    [x*x for x in range(1,11)if x%2 == 0]  #要生成的元素x*x放置前面

    #使用2层循环,生成全排列

    [m+n for m in 'ABC' for n in 'XYZ']

    import os # 导入os模块,模块的概念后面讲到

    >>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目录

    #for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value:

    d = {'x': 'A', 'y': 'B', 'z': 'C' }

    >>> for k, v in d.items():

    ...     print(k, '=', v)

    #列表生成式也可以使用两个变量来生成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', 18, 'Apple', None]

    >>> [s.lower() for s in L if isinstance(s,str) == True]

    3.4 生成器

    列表的空间是有限的,在python中,一边循环一边计算的机制 generator

    g = (x * x for x in range(10))

    for n in g:

             print(n)

             #著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:1, 1, 2, 3, 5, 8, 13, 21, 34, ...

             def fib(max):

        n, a, b = 0, 0, 1

        while n < max:

            print(b)

            a, b = b, a + b

            n = n + 1

        return 'done'

        #上面的函数和generator仅一步之遥。要把fib函数变成generator,只需要把print(b)改为yield b就可以了:

    #generator函数  在执行过程中,遇到yield就中断,下次又继续执行。

    ##杨辉三角

    def triangles():

        L = [1] #定义一个list[1]

        while True:

            yield L

            L = [L[i] + L[i + 1] for i in range(len(L) - 1)]

            L.insert(0,1)

            L.append(1)

            if(len(L)>10):

            break

    #生成一个generator对象,然后通过for循环迭代输出每一行

    a=triangles(10)

    for i in a:

        print(i)

    3.5迭代器

    直接作用于for循环的数据类型有以下几种:

    一类是集合数据类型,如list、tuple、dict、set、str等;

    一类是generator,包括生成器和带yield的generator function。

     Iterable 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。

    可以使用isinstance()判断一个对象是否是Iterable对象:

    isinstance({}, Iterable)  #True

     Iterator  可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

    可以使用isinstance()判断一个对象是否是Iterator对象:

    isinstance((x for x in range(10)), Iterator)  #True

     isinstance('abc', Iterator)  #False

    -------------------------------------------------------------

    是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回

    下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,

    但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,

    所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

    -------------------------------------------

    集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

  • 相关阅读:
    Hadoop学习笔记
    Hadoop学习笔记 -伪分布式
    SSH 连接报错总结
    Hadoop学习笔记
    Trie 前缀树/字典树
    解数独(Leetcode-37 / HDU-1426)/回溯/状态压缩
    MyBatis 多表关联查询
    python_37期自动化【lemon】
    api课堂笔记_day14
    api课堂笔记_day12&day13
  • 原文地址:https://www.cnblogs.com/smartwen666/p/7911296.html
Copyright © 2011-2022 走看看