跳到内容

手动列表推导式 (PERF401)

源自 Perflint linter。

有时提供修复。

作用

检查可以被列表推导式替代的 for 循环。

为什么这不好?

当使用 for 循环从现有列表创建一个转换后的列表时,优先选择列表推导式。列表推导式更易读且性能更高。

以下面的例子为例,列表推导式在 Python 3.11 上快约 10%,在 Python 3.10 上快约 25%。

请注意,与所有 perflint 规则一样,这仅用作微优化,并且在大多数情况下对性能的影响可以忽略不计。

示例

original = list(range(10000))
filtered = []
for i in original:
    if i % 2:
        filtered.append(i)

建议改为

original = list(range(10000))
filtered = [x for x in original if x % 2]

如果要附加到现有列表,请改用 extend 方法

original = list(range(10000))
filtered.extend(x for x in original if x % 2)