python中的列表解析和生成表达式
2023-06-13 09:14:27 时间
列表解析
在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为:
[exprforiter_variniterable][exprforiter_variniterableifcond_expr]
第一种语法:首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。
第二种语法:加入了判断语句,只有满足条件的内容才把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。
举例如下:
复制代码代码如下:
在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为:
[exprforiter_variniterable][exprforiter_variniterableifcond_expr]
第一种语法:首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。
第二种语法:加入了判断语句,只有满足条件的内容才把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。
举例如下:
>>>L=[(x+1,y+1)forxinrange(3)foryinrange(5)]
>>>L
[(1,1),(1,2),(1,3),(1,4),(1,5),(2,1),(2,2),(2,3),(2,4),(2,5),(3,1),(3,2),(3,3),(3,4),(3,5)]
>>>N=[x+10forxinrange(10)ifx>5]
>>>N
[16,17,18,19]
生成器表达式
生成器表达式是在python2.4中引入的,当序列过长,而每次只需要获取一个元素时,应当考虑使用生成器表达式而不是列表解析。生成器表达式的语法和列表解析一样,只不过生成器表达式是被()括起来的,而不是[],如下:
(exprforiter_variniterable)
(exprforiter_variniterableifcond_expr)
例:
>>>L=(i+1foriinrange(10)ifi%2)
>>>L
<generatorobject<genexpr>at0xb749a52c>
>>>L1=[]
>>>foriinL:
...L1.append(i)
...
>>>L1
[2,4,6,8,10]
生成器表达式并不真正创建数字列表,而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目“产生”(yield)出来。生成器表达式使用了“惰性计算”(lazyevaluation,也有翻译为“延迟求值”,我以为这种按需调用callbyneed的方式翻译为惰性更好一些),只有在检索时才被赋值(evaluated),所以在列表比较长的情况下使用内存上更有效。Ageneratorobjectinpythonissomethinglikealazylist.Theelementsareonlyevaluatedassoonasyouiterateoverthem.
一些说明:
1.当需要只是执行一个循环的时候尽量使用循环而不是列表解析,这样更符合python提倡的直观性。
foriteminsequence:
process(item)
2.当有内建的操作或者类型能够以更直接的方式实现的,不要使用列表解析。
例如复制一个列表时,使用:L1=list(L)即可,不必使用:
L1=[xforxinL]
3.如果需要对每个元素都调用并且返回结果时,应使用L1=map(f,L),而不是L1=[f(x)forxinL]
相关文章
- pycharm搭建python环境_pycharm如何配置编译环境
- python截图识别文字_Python文字截图识别OCR工具实例解析
- windows 下python 脚本启动多个redis服务
- Python编程 列表的常用方法
- 【说站】Python列表中有哪些索引
- 【说站】python中用切片复制列表
- 【说站】python列表添加和删除的方法
- 【说站】python列表缓存的探究
- 【说站】python列表有什么特点
- 【说站】python列表推导式的结构探究
- python实现手写数字识别(小白入门)「建议收藏」
- python图像多层小波分解_Python中图像小波分解与重构以及灰度图加噪
- python win32api sendmessage_Python win32api.SendMessage方法代码示例[通俗易懂]
- 1行Python代码,把PPT转成图片,python-office功能更新~
- Python写脚本尝试loguru模块
- 使用 Python 删除大于特定值的列表元素
- java和python写抢红包算法代码
- Python 小型项目大全 41~45
- Python输出函数print()总结(python print())详解编程语言
- python之内置函数详解编程语言
- c调用python出现异常的原因分析
- 浅析python内置字符串处理函数的使用方法
- Python读取图片EXIF信息类库介绍和使用实例