python--基础复习(高级特性)

    xiaoxiao2022-07-07  162

    文章目录

    切片迭代列表生成式生成器迭代器

    切片

    L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] L[0:3] L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引012,正好是3个元素。 如果第一个索引是0,还可以省略: L[:3] ['Michael', 'Sarah', 'Tracy'] 支持L[-1]取倒数第一个元素,那么它同样支持倒数切片 L[-2:] ['Bob', 'Jack'] >>> L[-2:-1] ['Bob'] 'ABCDEFG'[:3] 'ABC' >>> 'ABCDEFG'[::2] 'ACEG'

    迭代

    如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。

    dict迭代的是key。如果要迭代value,可以用for value in d.values(), 如果要同时迭代key和value,可以用for k, v in d.items() 由于字符串也是可迭代对象,因此,也可以作用于for循环: >>> for ch in 'ABC': ... print(ch) ... A B C 如何判断一个对象是可迭代对象 from collections import Iterable >>> isinstance('abc', Iterable) # str是否可迭代 True >>> isinstance([1,2,3], Iterable) # list是否可迭代 True >>> isinstance(123, Iterable) # 整数是否可迭代 False 最后一个小问题,如果要对list实现类似Java那样的下标循环怎么办? Python内置的enumerate函数可以把一个list变成索引-元素对, 这样就可以在for循环中同时迭代索引和元素本身: >>> for i, value in enumerate(['A', 'B', 'C']): ... print(i, value) ... 0 A 1 B 2 C

    列表生成式

    举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))

    [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] 使用两层循环,可以生成全排列: >>> [m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ'] import os # 导入os模块,模块的概念后面讲到 >>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目录 ['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library']

    生成器

    要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(), 就创建了一个generator: L = [x * x for x in range(10)] >>> L [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> g = (x * x for x in range(10)) >>> g <generator object <genexpr> at 0x1022ef630> generator和函数的执行流程不一样。 函数是顺序执行,遇到return语句或者最后一行函数语句就返回。 而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回, 再次执行时从上次返回的yield语句处继续执行。

    迭代器

    可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如listtupledictsetstr等; 一类是generator,包括生成器和带yield的generator function。 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。 可以使用isinstance()判断一个对象是否是Iterable对象 凡是可作用于for循环的对象都是Iterable类型; 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列; 集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
    最新回复(0)