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

如何用列表推导式重构Python三层嵌套循环代码?

用列表推导式重构三层嵌套循环

原代码的核心是生成l_ids、l_years、l_means的笛卡尔积,同时为每个组合生成随机能量值。以下是两种用列表推导式实现的方案:

方案1:先生成元组列表再拆分

先一次性生成所有组合的元组,再拆分到四个列表,这种方式只遍历笛卡尔积一次,性能更优:

import random

l_ids = ["0000000","0000010","0000020","0000030","0000040","0000050","0000060","0000070","0000080","0000090","0000100",
         "0000110","0000120","0000130","0000140","0000150"]
l_years = [2018,2019,2020,2021,2022]
l_means = ["car","train","plane","other","freight"]

# 生成包含所有组合与随机值的元组列表
combined = [
    (supp_id, year, mean, random.randint(100000000, 999999999))
    for supp_id in l_ids
    for year in l_years
    for mean in l_means
]

# 拆分元组到四个列表(zip返回元组,按需转成列表)
l_id, l_year, l_mean, l_energy = zip(*combined)
l_id = list(l_id)
l_year = list(l_year)
l_mean = list(l_mean)
l_energy = list(l_energy)

方案2:单独为每个列表写推导式

直接对应原循环逻辑,为每个列表编写独立的推导式,结构更贴近原代码:

import random

l_ids = ["0000000","0000010","0000020","0000030","0000040","0000050","0000060","0000070","0000080","0000090","0000100",
         "0000110","0000120","0000130","0000140","0000150"]
l_years = [2018,2019,2020,2021,2022]
l_means = ["car","train","plane","other","freight"]

l_id = [supp_id for supp_id in l_ids for year in l_years for mean in l_means]
l_year = [year for supp_id in l_ids for year in l_years for mean in l_means]
l_mean = [mean for supp_id in l_ids for year in l_years for mean in l_means]
l_energy = [random.randint(100000000, 999999999) for supp_id in l_ids for year in l_years for mean in l_means]

说明

两种方案都完全复刻原三层循环的行为:random.randint在推导式中每次调用都会生成新的随机数,和原代码逻辑一致。如果处理的列表规模较大,优先选方案1,减少遍历次数。

内容的提问来源于stack exchange,提问作者mouad Et-tali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:55:22