概述
列表生成式
正常生成 ,list 1-10
如果要生成[1x1, 2x2, 3x3, …, 10x10] 可以用 正常循环 , 但是用列表生成式 能方便很多
>>> L = []
>>> for x in range(1, 11):
... L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
生成器
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:
创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。
我们可以用next 来将这些元素一个一个打印出来 但是 太麻烦了 ,一般用 for 循环 打印
如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数
来实现。
比如,著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:
1, 1, 2, 3, 5, 8, 13, 21, 34, …
斐波拉契数列用列表生成式写不出来,但是,用函数把它打印出来却很容易:
仔细观察,可以看出,fib函数实际上是定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,这种逻辑其实非常类似generator。
也就是说,上面的函数和generator仅一步之遥。要把fib函数变成generator,只需要把print(b)改为yield b就可以了
map
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
reduce
reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是
要把序列[1, 3, 5, 7, 9]变换成整数13579
待补充
最后
以上就是优美薯片为你收集整理的phtyon 列表生成式 生成器 迭代器 map 和reduce的全部内容,希望文章能够帮你解决phtyon 列表生成式 生成器 迭代器 map 和reduce所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复