下面的代码将方程分解,并在对其进行排序后将其组装。

def simplify(poly):
    import re
    p=re.split('\+|\-',poly)
    return '+'.join(sorted(''.join(sorted(x)) for x in p))
print(simplify('a+ca-ab'))

问题:对它们进行排序并不困难,但是很难将运算符(+,-)放回,上面的代码只能将“+”放回公式中,而不能将“-”放回公式中。
我可以问一下我该怎么让接线员回去吗?

最佳答案

注意,您的函数名不适合代码。你只是试图整理字典顺序中的未知数。
如果你把未知和它们的符号分开,处理就会变得一团糟。一起处理:

import re

pattern = re.compile('[+-]?[a-z]+', re.I)

def ignore_sign(s):
    return re.sub('[+-]', '', s)

def simplify(poly):
    if poly[0] not in '+-':
        poly = '+' + poly
    parts = [''.join(sorted(part)) for part in re.findall(pattern, poly)]
    sorted_parts = sorted(parts, key=ignore_sign)
    return re.sub('^\+', '', ''.join(sorted_parts))

print(simplify('a-ac+ba'))
# a+ab-ac

为了避免把未知的成分混合在一起,一个+被添加到字符串中(谢谢@ RICI):
print(simplify('z-ac+ba'))
# ab-ac+z

在对零件进行排序时,只需忽略任何符号,以便-a出现在+z之前:
>>> sorted(['-a', '+z'])
['+z', '-a']
>>> sorted(['-a', '+z'], key=ignore_sign)
['-a', '+z']

07-24 18:53