2016-08-23 14 views
0

pythonを使って多項式を追加したり乗算したりしたいと思います。質問がある場合 たとえば、:1つの係数を使ったPythonの加算と乗算

addpoly([(4,3),(3,0)],[(-4,3),(2,1)]) 
[(2, 1),(3, 0)] (answer) 

私のコード:

def addpoly(x, y): 
min_len = min(len(x), len(y)) 
return x[: -min_len] + y[: -min_len] + [ x[i] + y[i] for i in range(-min_len,0) 

私の出力

addpoly([(4,3),(3,0)],[(-4,3),(2,1)]) 
[(4, 3, -4, 3), (3, 0, 2, 1)] 

必要な出力:

[(2, 1), (3, 0)] 

私が受け取るしたいと思います任意の提案可能な場合はオンにします。 ありがとうございます。

+0

ようこそ。このサイトは、*具体的な*質問であり、あいまいな提案のリクエストではありません。あなたの質問を編集して明確な質問をしてください。そうしないと回答が得られません。 – Julien

答えて

0

最も簡単な方法は、power -> coefficientアイテムをdictにあなたの多項式を変換することです:

In [7]: p1_c + p2_c 
Out[7]: Counter({0: 3, 1: 2}) 

し、リストにそれらをバックに変換:その後、あなたはこれらの辞書を追加することができ

In [1]: p1 = [(4,3),(3,0)] 

In [2]: p2 = [(-4,3),(2,1)] 

In [3]: from collections import Counter 

In [4]: p1_c = Counter(dict((degree, coef) for (coef, degree) in p1)) 

In [5]: p2_c = Counter(dict((degree, coef) for (coef, degree) in p2)) 

In [6]: p1_c, p2_c 
Out[6]: (Counter({0: 3, 3: 4}), Counter({1: 2, 3: -4})) 

In [8]: [(c, d) for (d, c) in (p1_c + p2_c).items()] 
Out[8]: [(3, 0), (2, 1)] 

また、de GREE(あなたの期待される出力をフィットする)

In [9]: from operator import itemgetter 

In [10]: sorted(((c, d) for (d, c) in (p1_c + p2_c).items()), key=itemgetter(1), reverse=True) 
Out[10]: [(2, 1), (3, 0)] 

ます。また、それはあなたが象徴的表現(すなわちで作業することができ、便利sympyライブラリを見つけることができます多項式も)非常にきちんとした方法で。