Python 列表生成式与生成器
admin
2023-07-30 20:46:19
0

列表生成式即List Comprehensions,是Python内置的非常强大的可以用来创建list的生成式。

列表生成式:

1、如要生成list[n,n+1,n+2,n+3,…..,m-1],可用range(n,m);


range(3,30)

2、在区间(n,m)中生成n,n+1,n+2,…,m-1的平方,可用[n*n for n in range(n,m)]


[n * n for n in range(5,15)]

如在上式的for后加上条件则可以筛选出符合条件的元素


[n * n for n in range(5,15) if n % 3 ==0]

3、也可以使用两层循环,可以生成全排列,如


[m+n for m in \’EFSD\’ for n in \”KLD\”]

4、运用列表生成式,可以写出非常简洁的代码。例如列出当前目录下的所有文件和目录名

导入模块 os,调用os中的listdir()函数。


列出当前目录下的所有文件和目录名

学过Python 的迭代特性,会了解for循环可以同时使用两个甚至多个变量,因此列表也可以使用两个变量来生成list.


使用两个变量来生成list

5、把list中所有的字符串变成小写


字符串变成小写

小结:运用列表生成式,可快速生成list,且代码十分简洁

当list中包含字符串与整数时,使用lower()函数会报错,可以使用内置函数判断一个元素是否是字符串


先判断后转换

生成器(generator):

通过列表生成式可快速创建一个列表,但是会受到内存限制,当创建一个列表包含超级多个元素时,不仅占用很大的存储空间,如果仅仅访问前面一部分的元素,则后面的绝大部分占用的空间就浪费了。而生成器的使用的是一边循环一边计算的机制,即解决使用列表生成式创建包含超级多的元素时造成的内存空间浪费的问题。

使用生成器创建列表时,与列表生成式很相似,即把中括号表位圆括号:即[]->()

生成器创建后,可使用G.next()输出元素,按序输出,但是生成器也是可迭代对象,可用for循环来迭代它。


生成器的创建于输出

生成器功能强大,如生成斐波拉契数列(Fibonacci)

Fibonacci:除第一与第二个数外,任意一个数都可由前两个数相加得到:


print ->yield的区别

要把fib函数变成generator,只需要把print y改为yield y就可以了,这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。

小结

generator是非常强大的工具,在Python中,可以简单地把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator。

要理解generator的工作原理,它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...