Python: форматирование строки вместе с enumerate? (Создание хорошего строкового представления многочлена по-питоновски)

#python #string #string-formatting

#python #строка #форматирование строки

Вопрос:

Я начал писать небольшой класс, который должен представлять полиномиальные функции в одной переменной. Я знаю, что существует мощный модуль sympy, но я решил, что проще поместить несколько строк кода вместо загрузки всего модуля sympy. Основная причина в том, что Просто используется уровень абстракции (т. Е. Работа с переменными и кольцами), который мне не нужен.

Итак, вот что я сделал:

 class Polynomial:
    """Class representing polynomials."""
    
    def __init__(self, *coefficients):
        self.coefficients = list(coefficients)
        """Coefficients of the polynomial in the order a_0,...a_n."""
     
    def __repr__(self):
        return "Polynomial(%r)" % self.coefficients
            
    def __call__(self, x):    
        res = 0
        for index, coeff in enumerate(self.coefficients):
            res  = coeff * x** index
        return res
  

Я хотел бы также реализовать __str___ с тем же результатом, который создается циклом for:

 res = ""
for index, coeff in enumerate(self.coefficients):
    res  = str(coeff)   "x^" str(index)
  

Во-первых, я ожидал, что что-то вроде "$r*x^%r" % enumerate(self.coefficients) сработает, но это не так. Я попытался преобразовать enumerate(...) в кортеж, но это также не решило проблему.

Есть идеи для питоновского однострочного оператора возврата, который я мог бы использовать для __str__ ?

Ответ №1:

Я не уверен, правильно ли я понял ваш вопрос, но вы можете использовать str.format with str.join для получения своей строки. Например:

 coefficients = [2, 5, 1, 8]
print( ' '.join('{1}*x^{0}'.format(*v) for v in enumerate(coefficients)) )
  

С принтами:

 2*x^0 5*x^1 1*x^2 8*x^3