用富有表现力的推导式取代那些用于构建数据的循环,从而转换、筛选并重新索引你的数据。
在 Kodokon 中打开本课列表推导式把编程中最常见的模式浓缩了起来:通过转换或筛选一个序列来构建列表。它的语法读起来就像一句话:[expression for element in sequence if condition]。它和用 append 的循环结果相同,却只需一行声明式代码,每个 Python 开发者都能一眼认出。
prices = [12.0, 49.9, 5.5, 199.0]
with_tax = [round(p * 1.2, 2) for p in prices]
cheap = [p for p in prices if p < 50]
print(with_tax) # [14.4, 59.88, 6.6, 238.8]
print(cheap) # [12.0, 49.9, 5.5]字典推导式遵循同样的逻辑,语法是 {key: value for ...}。项目中一个非常常见的用例是:按标识符对一个对象列表重新索引,从此可以即时查找,而不必每次需要时都遍历整个列表。
users = [
{"id": 7, "name": "Alice"},
{"id": 12, "name": "Bruno"},
{"id": 31, "name": "Chloe"},
]
by_id = {u["id"]: u["name"] for u in users}
print(by_id[12]) # Bruno
print(31 in by_id) # Trueif 有两个位置,对应两种不同的角色。放在 for 之后,它负责筛选:被排除的元素不会出现在结果里。放在 for 之前,作为条件表达式(a if condition else b),它为每个元素挑选一个值:此时列表的长度与源序列保持一致。
scores = [45, 82, 67, 91]
labels = ["pass" if s >= 60 else "fail" for s in scores]
print(labels) # ['fail', 'pass', 'pass', 'pass']