下面的代码将方程分解,并在对其进行排序后将其组装。
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']