簡體   English   中英

在python中從字典創建漂亮的多項式表示

[英]Creating a nice polynomial representation from a dictionary in python

我正在嘗試在python中轉換Polynomial({4:5,6:7,100:10})給我一個格式為的干凈輸出

[out]: 10*X^100 + 7*X^6 + 5*X^4

作為字符串。

因此,字典的第一個條目與X的指數匹配,第二個條目與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。 我確實希望上面的輸出全部在一行中,並且在它們之間有一個“ +”,就像上面的輸出示例一樣。 但是,如果沒有編寫非常丑陋的代碼(比上面的代碼丑陋),我將無法完成。

我不知道您要使用哪個庫來獲取多項式對象,但是假設它是所有常規方法的子類字典,並且我了解您,我相信您正在嘗試這樣做:

>>> 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()返回字典d的(key, value)元組的列表。
  • '%s*x^%s' % (c, e)格式化元組:c * x ^ e [c = coefficient,e = exponent]
  • ' + '.join(...)將所有內容加在一起,中間加上加號。

請注意,和往常一樣,Python中不能保證dict的順序。 如果您想要標准格式的文件,則需要進行某種排序。

如果您真的很喜歡它:

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM