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

Python循环遍历nAtt变量报错:SyntaxError: can't assign to literal

问题分析与解决

你写的代码存在两个核心问题:

  • 语法错误:Python不允许将数字字面量(比如0、1)作为for循环的变量名,变量名必须是合法的标识符(比如用val、item这类名称)。
  • 逻辑错误:四个独立的for循环会重复遍历nAtt数组四次,最终nAtt_change只会保留最后一个循环的赋值结果,根本没实现“根据每个元素的值对应生成结果”的需求。

下面是几种正确的实现方式:

方法1:字典映射(最简洁高效)

先定义值与对应结果的映射关系,再遍历数组生成结果:

# 定义映射规则
att_mapping = {
    0: 0,
    1: -6,
    2: -10,
    3: -20
}

# 你的原有代码:获取nAtt数组
nAtt = df["nAtt"].dropna().to_numpy()

# 生成对应的结果列表
nAtt_change_list = [att_mapping[val] for val in nAtt]

如果需要逐个处理元素,也可以用普通循环:

nAtt_change_list = []
for val in nAtt:
    nAtt_change_list.append(att_mapping[val])

方法2:循环内加条件判断

如果不想用字典,可在循环中通过if-elif判断每个值:

nAtt_change_list = []
for val in nAtt:
    if val == 0:
        nAtt_change_list.append(0)
    elif val == 1:
        nAtt_change_list.append(-6)
    elif val == 2:
        nAtt_change_list.append(-10)
    elif val == 3:
        nAtt_change_list.append(-20)

方法3:直接在DataFrame中处理(推荐)

既然用了pandas,无需转成numpy数组,直接在DataFrame中新增列处理更高效:

att_mapping = {0: 0, 1: -6, 2: -10, 3: -20}
# 直接生成新列
df["nAtt_change"] = df["nAtt"].dropna().map(att_mapping)
# 若需要数组,再转换
nAtt_change_array = df["nAtt_change"].to_numpy()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:50:43