返回介绍

第6单元 通过列表推导式理解列表

发布于 2024-01-28 22:01:16 字数 1136 浏览 0 评论 0 收藏 0

列表推导式是一个将数据集(不一定是列表)转换为列表的表达式。通过列表推导式,可以实现对所有或某些列表元素应用相同的操作,例如将所有元素转换为大写或每个元素的幂级数运算结果。

转换过程如下。

(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文