You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单次for循环中用类似list comprehension的方式生成多个分类列表

问题解答:单遍历实现多列表分类的简洁写法

完全可以实现结合两种方案的需求,仅遍历一次原列表,同时保持接近列表推导式的简洁写法,常用方案如下:


方案1:推导式+any函数实现(适合固定少量分类场景)

利用list.append()返回None(属于Falsy值)、any函数短路求值的特性,可以一行完成遍历与多列表追加:

red_objects, blue_objects, green_objects = [], [], []
# 列表推导式仅用于执行append逻辑,全None的结果列表不会产生额外业务影响
any([
    red_objects.append(obj.name) if obj.color == 'red'
    else blue_objects.append(obj.name) if obj.color == 'blue'
    else green_objects.append(obj.name) if obj.color == 'green'
    else None
    for obj in objects
])

该方案仅遍历objects一次,写法简洁度和单独写三个列表推导式接近,执行效率和原生for循环一致。


方案2:defaultdict通用实现(适合分类可扩展场景)

如果后续分类可能新增,推荐用collections.defaultdict实现,代码维护成本更低,同样仅遍历一次:

from collections import defaultdict

color_map = defaultdict(list)
for obj in objects:
    color_map[obj.color].append(obj.name)

# 按分类取值即可
red_objects = color_map.get('red', [])
blue_objects = color_map.get('blue', [])
green_objects = color_map.get('green', [])

注意:方案1的写法属于偏冷门的技巧性实现,团队协作场景下建议补充注释说明逻辑,避免其他开发者看不懂产生额外维护成本。

内容的提问来源于stack exchange,提问作者Trent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:06:03