Python 中列表生成器中的 If 和 else
最编程
2024-03-16 09:11:57
...
1. 当只有 if 时,列表生成式构造为 [最终表达式 - (范围选择 - 范围过滤)]
>>> [num ** 2 for num in range(10) if num % 2 == 0]
[0, 4, 16, 36, 64]
如果 if 和 for 的位置调换,则会报错。
>>> [num ** 2 if num % 2 == 0 for num in range(10)]
File "<stdin>", line 1
[num ** 2 if num % 2 == 0 for num in range(10)]
^
SyntaxError: invalid syntax
2. 当同时有 if 和 else 时,列表生成式构造为 [最终表达式 - 条件分支判断 - 范围选择]
>>> [num ** 2 if num % 2 == 0 else 0 for num in range(10)]
[0, 0, 4, 0, 16, 0, 36, 0, 64, 0]
如何 if 和 for 的位置调换,则会报错。
>>> [num **2 for num in range(10) if num % 2 == 0 else 0]
File "<stdin>", line 1
[num **2 for num in range(10) if num % 2 == 0 else 0]
^
SyntaxError: invalid syntax
官方文档并没有提及到这个。我就说一下我的理解方法。
1,python解释器看到列表生成式会先找关键字 for,for 后面的部分是为了筛选需要显示的数字,for 前面的表达式则是对这些数字进行进一步加工。
2,当只有 if 而没有 else 时,此时迭代器 range 里面的元素会被筛选,只有偶数才会进行下一步操作;筛选好之后,再进行平方操作。这里if的作用是为了筛选。
3, 当同时有 if 和 else 时,此时迭代器中的所有元素都将会在下一步被处理,然后就是偶数的进行平方,奇数的显示为0。这里 if 和 else 的作用则是为了进行不同条件下的处理。
上一篇: python 设置生成
推荐阅读
-
详细解释 Python 中的 __getitem__ 方法和切片对象
-
贪婪算法在 Python、JavaScript、Java、C++ 和 C# 中的多种实现及其在硬币变化、分数骑士、活动选择和使用哈夫曼编码的最小生成树问题中的应用实例
-
ES6、ES7、ES8、ES9 和 ES10 中的新功能列表
-
在 Python 中查看数据的维数 python 查看数据集的维数和大小
-
python 中的 async 和 await
-
介绍在 python 中查找列表的五种方法。
-
在 python Django 中向用户分配库存包括定义库存模型、用户模型和分配库存的逻辑。
-
python 请求包的请求函数中 params 和 data 的区别。
-
全面了解 python 中的类、对象、方法和属性。
-
python 中的列表、元组、字典和集合(列表章节)