Я пишу функцию 'упрощение', чтобы упростить полиномы, чтобы simplify("2xy-yx")
мог вернуть "xy"
, simplify("-a+5ab+3a-c-2a")
может вернуть "-c+5ab"
и т. Д.
Я нахожусь на стадии, гдеЯ разбил многочлены на несколько одночленов как элементы списка и разделил коэффициент одночленов и буквенную (переменную) части.
Например,
input = '3xy+y-2x+2xy'
Мой процесс дает мне:
Var = ['xy', 'y', 'x', 'xy']
Coe = ['+3', '+1', '-2', '+2']
Что я хочу сделать, это объединить те же самые мономы и сложить их соответствующие коэффициенты вдругой список одновременно.
Мой код был:
Play1 = Letter[:]
Play2 = Coe[:]
for i in range(len(Play1) - 1):
for j in range(i+1, len(Play1)):
if Play1[i] == Play1[j]:
Letter.pop(j)
Coe[i] = str(int(Play2[i]) + int(Play2[j]))
Coe.pop(j)
Но, похоже, это работает только со списками, где каждый повторяющийся элемент появляется не более двух раз.Например, ввод «-a + 5ab + 3a-c-2a» дает мне:
IndexError: pop index out of range
Я думал об использовании set
, но это изменит порядок.
Какой лучший способ продолжить?Спасибо.