外观
推导式
俗称为“行内 for
”和“行内 if
”。有什么用呢?
没用。
是的这就是一个简单的语法糖,可以用于 炫技 缩减代码长度。
行内 if
运行代码
a = ['danny', 'Yxzl', 'yxzlwz']
for i in a:
print(i if len(i) > 5 else i.upper(), end=' ')
print()
# 输出:DANNY YXZL yxzlwz
简而言之,格式就是这样子的:
满足条件时的值 if 条件 else 不满足条件时的值
当然我们还可以在“不满足条件时的值”上面做文章:
运行代码
a = ['danny', 'Yxzl', 'yxzlwz']
for i in a:
print(i.upper() if len(i) > 5 else i.title() if len(i) > 4 else i.lower(), end=' ')
print()
# 输出:Danny yxzl YXZLWZ
行内 for(推导式)
列表推导式
运行代码
a = ['danny', 'Yxzl', 'yxzlwz']
b = [i.upper() for i in a]
print(b) # ['DANNY', 'YXZL', 'YXZLWZ']
“集合推导式”和“元组推导式”与之类似,只需要将第二行的 []
替换为 {}
或 ()
即可。
字典推导式
运行代码
a = ['danny', 'Yxzl', 'yxzlwz']
b = {i.upper(): i.lower() for i in a}
print(b) # {'DANNY': 'danny', 'YXZL': 'yxzl', 'YXZLWZ': 'yxzlwz'}
推导式与行内 if 结合
计算小于 30 的非负整数中能被 3 整除的数
运行代码
ans = [i for i in range(30) if i % 3 == 0]
print(ans) # [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
此时 if
强制出现在 for
后面。
计算小于 30 的非负整数中能被 3 整除的数,不能的位置填充 -1
运行代码
ans = [i if i % 3 == 0 else -1 for i in range(30)]
print(ans) # [0, -1, -1, 3, -1, -1, 6, -1, -1, 9, -1, -1, 12, -1, -1, 15, -1, -1, 18, -1, -1, 21, -1, -1, 24, -1, -1, 27, -1, -1]
此时 if
强制出现在 for
前面。
版权所有
版权归属:异想之旅