私のソリューションでは、i 番目の要素が x^i の係数であるイテラブルを使用するため、p(x) = 3*x^5 + 2*x^3 + x^2 + 5の場合、入力は になります[5, 0, 1, 2, 0, 3]
。導関数はp'(x) = 15*x^4 + 6*x^2 + 2*xであるため、期待される結果は になります[0, 2, 6, 0, 15]
。
>>> import itertools, operator
>>> coeff = [5, 0, 1, 2, 0, 3]
>>> print list(itertools.imap(operator.mul, itertools.islice(coeff, 1, None), itertools.count(1)))
[0, 2, 6, 0, 15]
更新: イテレータなどを使用してここで本当にトリッキーにしたかったのですが、私のソリューションは GregS のソリューションの 2 倍以上遅いことが判明しました。この遅さがどこから来たのか誰か説明してくれませんか?
>>> print timeit.repeat("poly(coeff)", "poly = lambda coeff: [coeff[i] * i for i in range(1, len(coeff))]; coeff = [1, 0, 0, 5, 0, -29]")
[1.7786244418210748, 1.7956598059847046, 1.7500179643792024]
>>> print timeit.repeat("poly(coeff)", "import operator, itertools; poly = lambda coeff: list(itertools.imap(operator.mul, itertools.islice(coeff, 1, None), itertools.count(1))); coeff = [1, 0, 0, 5, 0, -29]")
[4.01759841913463, 4.152715700867423, 5.195021813889031]