Python高级特性:切片;迭代;列表生成式;生成器;迭代器

最后更新于:2022-04-01 07:27:46

#### 切片 在Python中常见的操作是取一个list或tuple的一部分,比如一个list如下: ~~~ L = ['red','yellow','black','orange','white','green','blue'] ~~~ 取前三个元素的操作,除了用循环,还可以用切片: ~~~ L[0:3] #表示从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素 print(L[-2:]) #表示取倒数后两个 ~~~ 实例: ~~~ #定义从1到100的序列 L = list(range(100)) #取前十个,同时隔一个数取一个 print(L[:10:2]) ~~~ #### 迭代 一般程序语言的迭代使用for。Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。  除了list这种有下标的数据类型,还有例如dict这样的无下标的,也可以使用for迭代。 ~~~ d = {'funny':1,'lucky':2,'daddy':3} for key in d: print(key) #因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。 ~~~ 同时value也可以迭代。 ~~~ for values in d.values(): print(values) ~~~ 如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断: ~~~ >>> from collections import Iterable >>> isinstance('abc', Iterable) # str是否可迭代 True >>> isinstance([1,2,3], Iterable) # list是否可迭代 True >>> isinstance(123, Iterable) # 整数是否可迭代 False ~~~ #### 列表生成式(List Comprehensions) python内置了功能强大的列表生成式。  实例: ~~~ l = list(range(1,11)) print(l) ~~~ 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  实例:输出1-10 的平方 ~~~ L = [] for x in range(1,11): L.append(x*x) ~~~ 练习:  L1 = [‘Hello’, ‘World’, 18, ‘Apple’, None]  期待输出: [‘hello’, ‘world’, ‘apple’]  code: ~~~ L1 = ['Hello', 'World', 18, 'Apple', None] L2 = [] for x in L1: if isinstance(x,str): L2.append(x.lower()) print(L2) ~~~ #### 生成器 在Python中,一边循环一边计算的机制,称为生成器:generator,即只计算出要使用的数,节省空间。  要创建一个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: ~~~ g = (x*x for x in range(10)) for x in g: print(x) ~~~ 练习 杨辉三角定义如下:  1  1 1  1 2 1  1 3 3 1  1 4 6 4 1  1 5 10 10 5 1  把每一行看做一个list,试写一个generator,不断输出下一行的list. ~~~ def triangles(): L = [1] while True: yield L L1 = L[:] L = [] i = 0 while i < len(L1) - 1: L.append(L1[i] + L1[i+1]) i = i + 1 L.insert(0, 1) L.append(1) n = 0 for t in triangles(): print(t) n = n + 1 if n == 10: break ~~~
';