【问题标题】:Python: confused about assignment in nested listsPython:对嵌套列表中的赋值感到困惑
【发布时间】:2015-10-24 11:50:33
【问题描述】:

我将多项式放入嵌套列表中;例如5X^3+4X^2+8X。我将系数 (5,4,8) 存储在第一个列表中,将指数 (3,2,1) 存储在第二个列表中:

polynom = [[5,4,8],[3,2,0]]

然后我定义一个函数来弹出像这样的系数和指数的最后一项

def expon_coef_pop(seq):
    expon = seq[1]
    coef = seq[0]
    expon.pop()
    coef.pop()
    return coef, expon

print(expon_coef_pop(polynom))
print(polynom)

# polynom changed into [[5,4],[4,2]]

令人惊讶的是,我发现polynom 的值变成了[[5,4],[3,2]]。 我以为我只是修改了exponcoef 的值。

我不想改变多项式的值。

这怎么会发生,以及如何处理这个问题?我对为什么 polynorm 改变而不是功能感到困惑。 (我只是为了一个简单的例子写了这个函数。)

【问题讨论】:

  • 怎么是 8X 不应该是 8 因为 X^0 是 1
  • coeffexpon 是对与 seq[0]seq[1] 相同的列表对象的引用。
  • 对不起,打错了(●'◡'●)

标签: python list nested


【解决方案1】:

coefexpon 都是指向与 seq[0]seq[1] 对应的相同列表对象的引用。您需要在弹出列表之前复制列表,这也可以一步完成:

def expon_coef_pop(seq):
    return seq[0][:-1], seq[1][:-1]

【讨论】:

    【解决方案2】:

    这是因为您通过引用传递列表。将此作业与复制进行比较

    expon = list(seq[1])
    coef = list(seq[0])
    

    【讨论】:

    • 这正是我所需要的!谢谢!
    • 它说 'TypeError: 'list' object is not callable'
    • @SeanXie 试试我的答案并告诉我
    • @SeanXie 我在 python 2 和 python 3 上都检查了它,它可以工作。也许您在程序的另一部分中有名为“列表”的对象?如果是真的,只需重命名它。
    • 我刚刚在 python 3.5 控制台中尝试了 expon=list(polynom[0]) 。它仍然说 TypeError
    【解决方案3】:

    只需更改简单的修改。你可以试试:

    你需要改变

    expon = seq[1] to expon = seq[1][:]
    coef = seq[0] to coef = seq[0][:]
    

    你的最终代码:

    polynom = [[5,4,8],[3,2,0]]
    def expon_coef_pop(seq):
        expon = seq[1][:]
        coef = seq[0][:]
        expon.pop()
        coef.pop()
        return coef, expon
    
    print(expon_coef_pop(polynom))
    print(polynom)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-11
      • 2020-09-18
      • 2016-12-27
      • 2017-05-10
      • 2015-11-07
      • 2012-09-09
      • 2018-02-15
      • 2016-04-08
      相关资源
      最近更新 更多