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

Python列表推导式嵌套for循环报NameError: name 'lst'未定义

错误原因

你的报错是列表推导式嵌套循环的书写顺序错误导致的,和列表推导式本身的支持能力无关。
列表推导式的嵌套循环书写顺序和常规多层for循环的顺序完全一致,常规遍历嵌套列表的写法如下:

import re
lsts = [['2020', '2019', '2018'], ['iPhone (1)', '$', '137781', '$', '142381', '$', '164888'], ['Mac (1)', '28622']]
new_lst = []
# 外层循环先遍历大列表拿到每个子列表
for lst in lsts:
    # 内层循环再遍历子列表拿到每个元素
    for ele in lst:
        new_lst.append(re.sub('[0-9]', '', ele))

你写的列表推导式把内外层循环顺序写反了,先执行for ele in lst的时候lst还没有被赋值,自然触发NameError: name 'lst' is not defined。

修复方案

方案1:输出扁平化一维列表

如果需要把所有处理后的元素整合到同一个一维列表中,调整循环顺序即可:

new_lst = [re.sub(r'[0-9]', '', ele) for lst in lsts for ele in lst]

小提示:正则匹配单个数字不需要加{1}(这是默认规则),加r前缀标记为原始字符串可以避免不必要的转义歧义

方案2:保留原嵌套结构

如果需要处理后和原列表保持完全一致的嵌套层级,使用双层嵌套列表推导式即可:

new_lsts = [[re.sub(r'[0-9]', '', ele) for ele in lst] for lst in lsts]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:48:01