[英]Python: String formatting together with enumerate? (Producing a nice string representation of a polynomial in a pythonic way)
[英]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.