我正在尝试在python中翻译Polynomial({4:5,6:7,100:10})
,以便为我提供
[out]: 10*X^100 + 7*X^6 + 5*X^4
作为一个字符串。
因此,字典的第一个条目与X
的指数匹配,并且第二个条目与其系数匹配,始终以最小指数从最高位开始。为了感受这种情况,我试图迭代字典并注意到输出不是我所期望的
例如,如果我设置上面的dictionary = {4:5,6:7,100:10}
字典
我按照
for exponent in dictionary:
print exponent
我得到输出100,4,6。这对我来说不是很直观。但是,我在本网站上查看了operator
模块和一些类似的问题,并提出了以下代码。
import operator
class Polynomial(object):
def __init__(self, polynom = {}):
self.polynom = polynom
self.poly_string = self.nicePolynom(polynom)
def __str__(self):
return self.poly_string
def nicePolynom(self, polynom):
sorted_polynom = sorted(polynom.items(), key=operator.itemgetter(0))
sorted_polynom.reverse()
for element in sorted_polynom:
exponent = str(element[0])
coefficient = str(element[1])
term = coefficient + "*X^" + exponent
print term
return term
基本上我想要的是什么。但是我对如何使它适合所有人一无所知。我当前的输出(由代码中的基本打印语句引起)是
10*X^100
7*X^6
5*X^4
当然还有刚刚评估为5 * X ^ 4的return语句。我确实希望上面的输出都在一行中并且有一个" +"在它们之间,就像在上面的输出示例中一样。但是,如果没有编写非常丑陋的代码(比上面的代码更丑),我无法完成此操作。
答案 0 :(得分:3)
我不知道您使用哪个库来获取Polynomial对象,但假设它是一个带有所有常规方法的子类字典并且我已经理解了您,我相信您正在尝试这样做:
>>> d = {4:5, 6:7, 100:10}
>>> ' + '.join(('%s*x^%s' % (c, e) for e, c in d.items()))
'10*x^100 + 5*x^4 + 7*x^6'
为你打破一点:
d.items()
返回dict d的(key, value)
元组列表。'%s*x^%s' % (c, e)
格式化元组:c * x ^ e [c =系数,e =指数] ' + '.join(...)
将所有内容与中间的加号相结合。请注意,与往常一样,Python中无法保证dict顺序。如果你想要标准形式的这些,你需要进行某种排序。
答案 1 :(得分:0)
如果你喜欢它真的很短:
class Polynomial(dict):
def __str__(self):
return ' + '.join("{}*X^{}".format(self[exp], exp)
for exp in sorted(self, reverse=True))
>>> print Polynomial({4:5,6:7,100:10})
'10*X^100 + 7*X^6 + 5*X^4'