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

列表推导式使用疑问:复杂循环转换失败及转换可行性咨询

列表推导式优化问题及适用范围咨询

我尝试用列表推导式优化代码,已经成功把下面的简单循环转换成列表推导式:

# 旧写法
loaded_sounds = []
for i in assetList_text:
    if i.startswith("loaded_sound"):
        loaded_sounds.append(i.split(',')[1])

# 新写法
loaded_sounds = [i.split(',')[1] for i in assetList_text if i.startswith("loaded_sound")]

但在转换带有两个条件且包含去重逻辑的循环时,结果不符合预期:

原循环执行后输出长度为6:

gsc_files = []
for i in assetList_text:
    if ".gsc" in i:
        d = i.split(',')[-1].replace("\n", "")
        if d not in gsc_files:
            gsc_files.append(d)

而我写的对应列表推导式执行后输出长度为0:

gsc_files = [i.split(',')[-1].replace("\n", "") for i in assetList_text if ".gsc" in i if i.split(',')[-1].replace("\n", "") not in gsc_files]

我不知道问题出在哪里。另外,我想了解列表推导式的适用范围,请问下面两个循环能不能转换为列表推导式?

[1] 嵌套循环

weapon_files = []
x = join(f"{WAW_ROOT_DIR}/raw/weapons/sp")
for path, subdirs, files in walk(x):
    for fileName in files:
        content = join(x, fileName)
        if content not in weapon_files:
            weapon_files.append(f"{WAW_ROOT_DIR}/raw/weapons/sp/{fileName}")

[2] 多分支条件循环

gsc_files_dir = []
for path in gsc_files:
    if f"{CURRENT_SELECTED_MOD.lower()}" in path:
        dir = join(f"{WAW_ROOT_DIR}/mods/{CURRENT_SELECTED_MOD}/{path}")
        gsc_files_dir.append(dir)
    elif os.path.exists(f"{WAW_ROOT_DIR}/mods/{CURRENT_SELECTED_MOD}/{path}"):
        dir = join(f"{WAW_ROOT_DIR}/mods/{CURRENT_SELECTED_MOD}/{path}")
        gsc_files_dir.append(dir)
    else:
        dir = join(f"{WAW_ROOT_DIR}/raw/{path}")
        gsc_files_dir.append(dir)

附:数据示例

assetList_text是读取自多个CSV文件的3000+行数据,部分含.gsc的行示例如下:

fx,weapon/shellejects/fx_smk_weapon_shell_eject
fx,weapon/shellejects/fx_smk_weapon_shell_emit
...
rawfile,maps/free_city.gsc
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:06:19