目录
原文链接:https://blog.csdn.net/leavemetomorrow/article/details/90641362
- 当只有 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
- 当同时有 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
- 高级用法
diff = df[height2] - df[height1]
diff = diff.apply(lambda x: x - 360 if x > 180 else x + 360 if x < -180 else x)
同时处理多列
import numpy as np
# Assuming df is a DataFrame
df = df.apply(lambda col: np.where(col > 180, col - 360, np.where(col < -180, col + 360, col)))
官方文档并没有提及到这个。我就说一下我的理解方法。
1,python解释器看到列表生成式会先找关键字 for,for 后面的部分是为了筛选需要显示的数字,for 前面的表达式则是对这些数字进行进一步加工。
2,当只有 if 而没有 else 时,此时迭代器 range 里面的元素会被筛选,只有偶数才会进行下一步操作;筛选好之后,再进行平方操作。这里if的作用是为了筛选。
3, 当同时有 if 和 else 时,此时迭代器中的所有元素都将会在下一步被处理,然后就是偶数的进行平方,奇数的显示为0。这里 if 和 else 的作用则是为了进行不同条件下的处理。
参考链接
[1] Python中列表生成式中的if和else 2019.5