我给出了一个带有指数的字典 - 系数作为多项式的键值对。我的任务是创建一个函数来返回包含派生指数 - 系数键 - 值对的字典。这是我到目前为止所得到的,但它不起作用:
def diff_p(d):
d = {i - 1: i*d[i] if i is not 0 else d[i]: 0 for i in d}
return d
p = {0: -3, 3: 2, 5: -1}
为什么会出现语法错误?并且有人可以提出一个很好的补救措施,最好是一个班轮吗?
更新
感谢Karl Knechtel的回答,人们可以将这个任务变成这个整齐的一个班轮:
deff_p = lambda d: {e - 1: c*e for e, c in d.items() if e != 0}
答案 0 :(得分:2)
试试这个:
def diff_p(d):
d = {i-1: i*d[i] for i in d if i != 0}
return d
这简单地删除了常数项(即零指数),因为它的导数为零。
答案 1 :(得分:1)
i - 1: i*d[i] if i is not 0 else d[i]: 0
问题在于您将i - 1: i*d[i]
和d[i]: 0
视为表达式中的单个“术语”。他们不是。您需要为键和值使用单独的条件逻辑。
此外,您应该使用==
和!=
进行数字比较,而不是is
和is not
。
这样会给你{(i - 1 if i != 0 else d[i]): (i*d[i] if i != 0 else 0) for i in d}
。 (它应该在没有括号的情况下工作,但我认为这样很难读。)
那就是说,鉴于你的字典代表多项式的系数,并且函数执行区分,我无法理解你为什么要加入这个奇怪的特殊术语。当你区分时,多项式的常数项应该完全消失;因此,自然逻辑是完全过滤掉的,例如:{i - 1: i*d[i] for i in d if i != 0}
。
最后,通常认为直接迭代字典的键值对(“项目”)是更清晰的:{e - 1: c * e for e, c in d.items() if e != 0}
(这里我为{exponent}和{{1写了e
对于“系数”)。