Slicing
1  | L[:10:2] # 前10个数,每两个取一个  | 
Iterating
1  | for x, y in [(1, 1), (2, 4), (3, 9)]:  | 
List Comprehension
A list comprehension allows you to easily create a list based on some processing or selection criteria.
1  | myList = [x * x for x in range(1, 11) if x % 2 != 0]  | 
Generator
Referennce: https://www.liaoxuefeng.com/wiki/1016959663602400/1017318207388128
Create a generator:
1  | L = [x * x for x in range(10)]  | 
Create a generator for fibbonacci:
1  | def fib(k): # print first k fibbonacci number  | 
generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
1  | def odd():  | 
118. Pascal’s Triangle
Leetcode: https://leetcode.com/problems/pascals-triangle/
1  | def generate(self, numRows):  | 
Iterator
可以直接作用于for循环的对象统称为可迭代对象:Iterable. list, set, dict, str, tuple.
而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
All generators are Interator, not all Iterable are Iterator.(list, set, dict, str, tuple)
But we can use iter() to transform iterables into interator.
1  | isinstance(iter([]), Iterator)  | 
Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。