Python 如何使用字典理解更改字典中的键值+;如果/否则?
我得到了一个字典,其中指数系数是多项式的键值对。我的任务是生成一个函数来返回包含导数指数系数键值对的字典。这是我目前得到的,但它不起作用: 为什么会出现语法错误?有人能想出一个很好的补救办法,最好是一个班轮 更新: 多亏了卡尔·克内赫特尔的回答,人们可以将这项任务变成一行简洁的句子:Python 如何使用字典理解更改字典中的键值+;如果/否则?,python,dictionary,derivative,polynomials,Python,Dictionary,Derivative,Polynomials,我得到了一个字典,其中指数系数是多项式的键值对。我的任务是生成一个函数来返回包含导数指数系数键值对的字典。这是我目前得到的,但它不起作用: 为什么会出现语法错误?有人能想出一个很好的补救办法,最好是一个班轮 更新: 多亏了卡尔·克内赫特尔的回答,人们可以将这项任务变成一行简洁的句子: deff_p=lambda d:{e-1:c*e表示e,c表示d中的c.items(),如果e!=0}请尝试以下操作: def diff_p(d): d = {i-1: i*d[i] for i in d
deff_p=lambda d:{e-1:c*e表示e,c表示d中的c.items(),如果e!=0}
请尝试以下操作:
def diff_p(d):
d = {i-1: i*d[i] for i in d if i != 0}
return d
这只是删除了常数项(即零指数),因为其导数为零
i - 1: i*d[i] if i is not 0 else d[i]: 0
问题是您将i-1:i*d[i]
和d[i]:0
视为表达式中的单个“术语”。事实并非如此。您需要对键和值使用单独的条件逻辑
另外,您应该使用==
和=
用于数值比较,not为
且为非
所以这将给你{(i-1如果i!=0其他d[i]):(i*d[i]如果i!=0其他0)作为d}
。(没有括号应该可以用,但我觉得这样读真的很难。)
也就是说,鉴于你的字典表示多项式的系数,而函数执行微分,我不明白你为什么要加上这个奇怪的特例术语。当你微分时,多项式的常数项应该完全消失;因此,自然的逻辑是将其完全过滤掉,比如:{i-1:i*d[i],如果i!=0}
最后,通常认为直接迭代字典中的键值对(“项”)更干净:
{e-1:c*e表示e,c表示d.items(),如果e!=0}
(这里我写了e
表示“指数”,写了c
表示“系数”)。那么else
子句应该是什么意思else
0?如果指数(d[i])是0(x^0=1),这意味着d[i]是一个常数,那么它的导数是0,因此d[i]:0你的意思是,如果i
不是0,那么d={i-1:i*d[i]}
。否则,d={d[i]:0}
?但是,在这种情况下,假设i
为0。Python认为你的意思是:d={i-1:d[i]:0代表d}
中的i,因为你的if..else
工作在:i*d[i]如果我不是0 else d[i]
。是的,这正是我想要的,想想看。我不需要导数的0键:)非常感谢,这是非常有用的信息,澄清了问题,也是最好的答案!
i - 1: i*d[i] if i is not 0 else d[i]: 0