在python中从字典创建一个很好的多项式表示

时间:2014-12-04 22:33:39

标签: python python-2.7 dictionary

我正在尝试在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语句。我确实希望上面的输出都在一行中并且有一个" +"在它们之间,就像在上面的输出示例中一样。但是,如果没有编写非常丑陋的代码(比上面的代码更丑),我无法完成此操作。

2 个答案:

答案 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'