文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
第6单元 通过列表推导式理解列表
列表推导式是一个将数据集(不一定是列表)转换为列表的表达式。通过列表推导式,可以实现对所有或某些列表元素应用相同的操作,例如将所有元素转换为大写或每个元素的幂级数运算结果。
转换过程如下。
(1) 表达式遍历数据集并访问集合中的每一项。
(2) 为每一项计算可选的布尔表达式(默认值为True)。
(3) 如果布尔表达式为True,则计算当前项目的循环表达式,并将其值附加到结果列表中。
(4) 如果布尔表达式为False,则忽略该项。
这里给出一些比较简单的列表推导式:
# 复制myList;等同于myList.copy()或者myList[:],但二者的效率都没有列表推导式高 [x for x in myList] # 提取非负项 [x for x in myList if x >= 0] # 用Mylist各项的平方构建一个新列表 [x**2 for x in** myList] # 用Mylist非零项的倒数构建一个新列表 [1/x for x in myList if x != 0] # 从打开的infile文件中选出所有的非空行, # 并删除这些行开头和结尾的空格 [l.strip() for l in infile if l.strip()]
在最后一个例子中,对于每个列表项,函数strip()被执行了两次。如果不想使用这种重复的表达方式,那么可以使用下面这样的嵌套列表推导式。其中,内部的列表推导式删除空白,外部的列表推导式消除空字符串:
[line for line in [l.strip() for l in infile] if line]
如果列表推导式被包含在圆括号中,而不是在方括号中,则程序将返回一个列表生成器对象:
(x**2 for x in** myList) # 结果为:<generator object <genexpr> at 0x...>
列表推导式的结果通常是重复项目的列表:数字、单词、词干和标题。如果想知道哪个项目是最常见或最少见的,可以借助于Counter类(参考第7单元),它是一个用于收集这类统计数据的免费工具。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论