我不明白为啥 Python 在此脚本中引发错误“TypeError: bad operand type for unary -: 'list''

Posted

技术标签:

【中文标题】我不明白为啥 Python 在此脚本中引发错误“TypeError: bad operand type for unary -: \'list\'\'【英文标题】:I don't understand why Python raises the error 'TypeError: bad operand type for unary -: 'list'' in this script我不明白为什么 Python 在此脚本中引发错误“TypeError: bad operand type for unary -: 'list'' 【发布时间】:2021-12-31 23:57:51 【问题描述】:

我目前正在使用以前在许多其他脚本中使用过的方法。此方法使用来自 numpy 的 linspace 函数,我们应用另一个函数(在本例中为 decrease)来绘制绘图。我添加了函数implement,这不是必需的,以纠正我遇到的其他一些错误。我对 t 从 ndarray 到列表的转换做了同样的事情。通常,我不会将 linspace 中的 ndarray 转换为列表,我可以将其直接应用到函数中并获得另一个 ndarray 的结果。这是一个非常简单的脚本,但我不明白为什么 python 会向我提出这个错误。这是脚本。提前感谢您的帮助。

import matplotlib.pyplot as plt
from math import *
import numpy as np


def decrease(a,k,t):
    res = (a*exp(-k*t) + 1 - a)
    return(res)

t = np.linspace(0,365,10000)
t = t.tolist()

def implement(a,k,t):
    k = []
    for i in t:
        k.append(decrease(a,k,i))
    return(k)

prop_red_LC = implement(0.43184,0.002460075,t)
prop_red_LT = implement(0.4477958,0.002515857,t)
prop_red_GC = implement(0.383793,0.002467542,t)
prop_red_GT = implement(0.3603323,0.00315626,t)


axes = plt.axes()
axes.grid() # dessiner une grille pour une meilleur lisibilité du graphe
plt.plot(t, prop_red_LC,label="Simulation de la décomposition pour AlpineControl", c='r')
plt.xlabel("temps (jours)")
plt.ylabel("M(t)/M0")
plt.legend()
plt.show()

Traceback (most recent call last):

  File "<ipython-input-61-5b6414ac720a>", line 1, in <module>
    prop_red_LC = implement(0.43184,0.002460075,t)

  File "<ipython-input-60-6ce6b9f5c45a>", line 16, in implement
    k.append(decrease(a,k,i))

  File "<ipython-input-60-6ce6b9f5c45a>", line 7, in decrease
    res = (a*exp(-k*t) + 1 - a)

TypeError: bad operand type for unary -: 'list'

【问题讨论】:

【参考方案1】:

程序将您的列表与 k 值混淆,更改列表变量的名称即可。

def implement(a,k,t):
    l = []
    for i in t:
        l.append(decrease(a,k,i))
    return l

【讨论】:

以上是关于我不明白为啥 Python 在此脚本中引发错误“TypeError: bad operand type for unary -: 'list''的主要内容,如果未能解决你的问题,请参考以下文章

为啥受保护的构造函数会在此代码中引发错误?

为啥“引发错误”有效,而“断言”无效?

网络表单中的此插入查询引发错误,我不知道为啥

我的 Outer Apply 语句中有语法错误,我不明白为啥[重复]

我有这个错误:无法读取 null 的属性“值”,我不明白为啥

我不明白为啥会出现语法错误